基于外键的mySQL更新元组


mySQL Update tuple based on foreign key

想象一下有两个表-车辆和;制造商。

车辆(Id[PK],制造商_Id[FK],名称,价格,折扣)

制造商(Id[PK],名称)

如果我想更新制造商名称为"宝马"的所有车辆。

我笨拙的方式。。。

"SELECT Id FROM Manufacturers WHERE Name = 'BMW'";

一旦我有了制造商Id,我就可以运行更新查询。

UPDATE Vehicles SET Discount='0.1' WHERE Manufacturer_Id='$manuId'

我正在寻找一个更优雅的解决方案,通过它我可以在更新语句中引用"宝马",并取消选择查询。

我想做这样的事。。。如果可能:

UPDATE Vehicles SET Discount='0.1' WHERE Vehicles.Manufacturer_Id = Manufacturer.Id AND Manufacturer.Name = 'BMW'

类似这样的查询应该可以工作:

UPDATE Vehicles SET Discount='0.1' WHERE Manufacturer_Id IN (SELECT Id FROM Manufacturers WHERE Name = 'BMW'")
UPDATE Vehicles SET Discount='0.1' WHERE Manufacturer_Id IN 
(SELECT id FROM Manufacturers WHERE Name = 'BMW');

简单的答案是子选择,但通常子选择对性能不好。在这种情况下,假设OK。如果需要经常使用制造商密钥对(id-name)、填充选择、在显示时从名称中获取id等。使用身份映射模式(假设有OOP的外观)并另外使用memcache之类的缓存策略来减少更多的数据库访问可能是有意义的。