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'

私が探しているのは、より洗練されたソリューションです。これにより、updateステートメント内で「BMW」を参照し、selectクエリを削除できます。

たとえば、私はこのようなことをしたいです...可能であれば:

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と仮定します。Manufacturersキーペア(id-name)を頻繁に使用する必要がある場合は、selectの入力、表示時に名前からidを取得するなど。IdentityMapパターン(OOPの類似性を想定)を使用し、さらにmemcacheなどを使用することは理にかなっています。データベースへのアクセスをさらに削減するためのキャッシュ戦略。

于 2012-09-10T20:16:00.140 に答える