假设我有两张桌子。一个用于水果容器,一个用于水果。像这样:
CREATE TABLE Containers
(
ContainerID int,
ContainedFruit int
)
CREATE TABLE Fruit
(
FruitID int,
Name VARCHAR(16)
)
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, 1 )
INSERT INTO Containers VALUES ( 101, 1 )
INSERT INTO Containers VALUES ( 102, 1 )
INSERT INTO Containers VALUES ( 102, 2 )
INSERT INTO Containers VALUES ( 102, 3 )
INSERT INTO Containers VALUES ( 103, 3 )
INSERT INTO Containers VALUES ( 103, 4 )
INSERT INTO Containers VALUES ( 104, 3 )
我想找到其中只有一种水果的所有容器 ID。他们被允许在其中有两个苹果(如容器 101 的情况),或者其中只有一个项目(容器 104)。但是容器 102 和 103 里面有两种不同的水果,所以我不希望它们被包括在内。
我将如何做一个 SELECT 来抓取容器 101 和 104,以及将来只有一种水果的任何其他容器?
- 编辑 -
好的,所以这实际上只是我的问题的一半:
假设我有第三张桌子。这唯一地标识了容器。无论如何,它有点暗示在这个结构中:
INSERT INTO FRUIT VALUES ( 0, 'Mixed' )
CREATE TABLE Each_Container
(
Container ID int PRIMARY KEY,
FruitType int
)
INSERT INTO Each_Container VALUES ( 101, 0 )
INSERT INTO Each_Container VALUES ( 102, 0 )
INSERT INTO Each_Container VALUES ( 103, 0 )
INSERT INTO Each_Container VALUES ( 104, 3 )
现在,前三个容器被标记为 MIXED。而第四个只是樱桃的容器。但这是我的问题:
如何更新所有错误标记的容器,如 101?那些只标记为混合的,因为它们里面有多种水果,即使它们是同一种水果?102 和 103 应该混合,但 101 不应该。