0

我有一个表 A,它与表 B 中的记录具有 1-* 关系(即 B 中可以有多个记录对应于 A 中的单个记录)。

B 中的每条记录都有一个值列 X。

我想从 A 中找到一条在 B 中没有特定值 Y 的相应记录的记录。

例如,我在 A 中有 3 条记录(此处在左侧表示为数字 1、2 和 3)。每个在 B 中都有记录,其值由逗号分隔列表表示(每个分隔值都是 B 中的记录)。

1   a,b
2   a,c
3   b,c

如果我想获取所有不具有“a”值的记录(即我想要记录 3),我该怎么做?

4

1 回答 1

2

您可以使用以下任一方法来做到这一点WHERE NOT EXISTS

SELECT *
FROM A
WHERE NOT EXISTS (SELECT * FROM B WHERE X = 'a' AND A.ID = B.ID)

LEFT JOINWHERE ... IS NULL

SELECT A.* 
FROM A
LEFT JOIN B ON B.ID = A.ID AND B.X = 'a'
WHERE B.ID IS NULL

B.X = 'a'JOIN条件的一部分,因此只有来自 B 的X = 'a'行将被匹配,如果不存在这样的行(即IS NULL),我们想要来自 A 的那些行。

于 2013-05-29T15:51:07.873 回答