[英]Select values in SQL that have a colum value in one row and not a specific other column value in another
从下表中,我想返回所有包含主题3但没有主题4的书籍的集合。
id book topic
10 1000 3
11 1000 4
12 1001 2
13 1001 3
14 1002 4
15 1003 3
正确的表应为:
book
1001
1003
我做了一个SQL拨弄这个测试在这里 。
到目前为止,我尝试以下,但它返回1000
, 1001
, 1003
(因为我不是相互比较两行,不知道该怎么做):
SELECT DISTINCT a.id
FROM TOPICS a, TOPICS b
WHERE a.id = b.id
AND a.topic = 3
AND NOT EXISTS (
SELECT DISTINCT c.id
FROM TOPICS c
WHERE a.id = c.id
AND b.topic = 4
)
你快到了。 not exists
条件绝对是正确的主意,您只需要应用另一个条件来检查主题3的存在:
SELECT DISTINCT a.book
FROM topics a
WHERE EXISTS (SELECT *
FROM topics b
WHERE a.book = b.book AND b.topic = 3) AND
NOT EXISTS (SELECT *
FROM topics b
WHERE a.book = b.book AND b.topic = 4)
使用不存在:
SELECT a.book
FROM TOPICS a
WHERE a.topic = 3
AND NOT EXISTS
(SELECT 1
FROM TOPICS b
WHERE a.book = b.book
AND b.topic = 4)
由于您使用的是SQL Server(至少是小提琴),因此可以使用set运算符except
:
SELECT DISTINCT book FROM TOPICS WHERE topic = 3
EXCEPT
SELECT DISTINCT book FROM TOPICS WHERE topic = 4
这将返回1001和1003。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.