0

想象一下有 2 张桌子 - 车辆和制造商。

车辆(Id[PK]、Manufacturer_Id[FK]、名称、价格、折扣)

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

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

我笨拙的方式...

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

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

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

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

例如,我想做这样的事情......如果可能的话:

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

3 回答 3

2

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

UPDATE Vehicles SET Discount='0.1' WHERE Manufacturer_Id IN (SELECT Id FROM Manufacturers WHERE Name = 'BMW'")
于 2012-09-10T20:15:49.633 回答
1
UPDATE Vehicles SET Discount='0.1' WHERE Manufacturer_Id IN 
(SELECT id FROM Manufacturers WHERE Name = 'BMW');
于 2012-09-10T20:13:36.017 回答
0

简单的答案是子选择,但通常子选择对性能不利。在这种情况下假设 OK。如果需要经常使用制造商密钥对(id-name)、填充选择、从显示的名称中获取 id 等。使用 Identity Map 模式(假设类似于 OOP)和另外使用类似 memcache 的东西可能是有意义的为您的缓存策略减少更多访问数据库的次数。

于 2012-09-10T20:16:00.140 回答