3 つのテーブルがあり、そのうちの 1 つを更新する必要があります。
CREATE TABLE Containers (
ID int PRIMARY KEY,
FruitType int
)
CREATE TABLE Contents (
ContainerID int,
ContainedFruit int
)
CREATE TABLE Fruit (
FruitID int,
Name VARCHAR(16)
)
INSERT INTO Fruit VALUES ( 0, 'Mixed' )
INSERT INTO Fruit VALUES ( 1, 'Apple' )
INSERT INTO Fruit VALUES ( 2, 'Banana' )
INSERT INTO Fruit VALUES ( 3, 'Cherry' )
INSERT INTO Fruit VALUES ( 4, 'Date' )
INSERT INTO Containers VALUES ( 101, 0 )
INSERT INTO Containers VALUES ( 102, 0 )
INSERT INTO Containers VALUES ( 103, 0 )
INSERT INTO Containers VALUES ( 104, 3 )
INSERT INTO Contents VALUES ( 101, 1 )
INSERT INTO Contents VALUES ( 101, 1 )
INSERT INTO Contents VALUES ( 102, 1 )
INSERT INTO Contents VALUES ( 102, 2 )
INSERT INTO Contents VALUES ( 102, 3 )
INSERT INTO Contents VALUES ( 103, 3 )
INSERT INTO Contents VALUES ( 103, 4 )
INSERT INTO Contents VALUES ( 104, 3 )
これが私のデータベースの状態であるとしましょう。Fruit
テーブルは2回使用されていることに注意してください。1 つは容器の内容を説明するため、もう 1 つは容器に 1 種類の果物のみを入れることを意図しているか、それとも混合できるかを説明することです。悪いデザインの IMO ですが、変更するには遅すぎます。
問題は、コンテナ 101 が実際には APPLE であるべきなのに、誤って MIXED とマークされていることです。同じタイプのコンテンツが複数あるコンテナは、同種のコンテナであるため、そのようにマークする必要があります。
混合として誤ってマークされているコンテナーを見つけるクエリを実行する方法を知っています。
SELECT Contents.ContainerID
FROM Contents
INNER JOIN Containers ON
Contents.ContainerID = Containers.ID AND
Containers.FruitType = 0
GROUP BY Contents.ContainerID
HAVING COUNT( DISTINCT Contents.ContainedFruit ) = 1
ただし、このエラーが発生したコンテナ内のすべての行を更新する方法がわかりません。それが私の質問です。