我有这张桌子:
BOOKID | TITLE | SUBTITLE
1000 |The Lord of the Rings |The Return of the King
1001 |The Lord of the Rings |The Two Towers
1002 |The Lord of the Rings |The Two Towers
1003 |The Lord of the Rings |The Fellowship of the Ring
我使用此代码来获取三个不同部分的书号,但是只有一次。
select BOOKID
from BOOKS
WHERE TITLE = 'The Lord of the Rings' AND
SUBTITLE IN (SELECT SUBTITLE FROM BOOKS GROUP BY SUBTITLE HAVING COUNT(*) < 2);
例如,我需要以下三个ID:1000、1001、1003。 但是如果COUNT(*)= 1,我得到4或2。
答案 0 :(得分:1)
您可以在主查询中使用GROUP BY
select min(BOOKID) as BOOKID
from BOOKS
where TITLE = 'The Lord of the Rings'
group by SUBTITLE
保证每个唯一的SUBTITLE
仅有一行(最小BOOKID
)。对于您的示例,您将根据需要获得1000、1001、1003。
答案 1 :(得分:0)
您可以采取不同的方法:从标题为“ ...”(按TITLE,SUBTITLE分组)的图书中选择min(book_id)作为图书ID
以您的原始方式,技术上来说,字幕被发现了两次……子集是一个不同的列表,但是表中的两行符合条件,这就是为什么要得到4。执行count(*)== 1时,只有2行符合该条件,这就是原因。