簡體   English   中英

基於外鍵的MySQL更新元組

[英]mySQL Update tuple based on foreign key

想象一下有2張桌子-車輛和制造商。

車輛(編號[PK],制造商編號[FK],名稱,價格,折扣)

制造商(編號[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'

這樣的查詢應該可以工作:

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');

簡單的答案是子選擇,但總的來說,子選擇不利於性能。 在這種情況下,請假設“確定”。 如果需要經常使用制造商密鑰對(id-name),填充選擇項,從顯示的名稱中獲取ID等。使用Identity Map模式(假設有些類似OOP)並另外使用諸如memcache之類的方法可能很有意義。為您提供了一種緩存策略,可進一步減少訪問數據庫的次數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM