Oracle SQL不同的ID但值相同

时间:2018-11-09 22:40:24

标签: sql oracle

我有这张桌子:

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。

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行符合该条件,这就是原因。