基于外键的mySQL Update元组

时间:2012-09-10 20:06:55

标签: php mysql sql-update

想象一下有两张桌子 - 车辆和厂家。

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

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

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

我笨重的方式......

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

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

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

我正在寻找的是一个更优雅的解决方案,我可以在更新声明中以某种方式引用“BMW”,并取消选择查询。

e.g。我想做这样的事情......如果可能的话:

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

3 个答案:

答案 0 :(得分:2)

这样的查询应该有用:

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

简单回答是子选择,但一般来说,子选择不利于性能。假设在这种情况下确定。如果需要经常使用制造商密钥对(id-name),填充选择,在显示时从名称获取id等等。使用身份映射模式(假设有一些OOP的外观)并另外使用诸如memcache之类的东西可能是有意义的为您提供缓存策略,以便在访问数据库时减少更多。