繁体   English   中英

选择SQL中在一行中具有列值而不在另一列中具有特定其他列值的值

[英]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拨弄这个测试在这里

到目前为止,我尝试以下,但它返回100010011003 (因为我不是相互比较两行,不知道该怎么做):

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM