Oracle SQL другой идентификатор, но те же значения - PullRequest
0 голосов
/ 10 ноября 2018

У меня есть эта таблица:

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);

Мне нужны, например, эти три идентификатора: 1000, 1001, 1003. Но я получаю четыре или два, если COUNT (*) = 1.

Ответы [ 2 ]

0 голосов
/ 10 ноября 2018

Вы можете сделать это по-другому: выберите min (book_id) в качестве идентификатора книги из книг, где title = '...' group by TITLE, SUBTITLE

Ваш оригинальный способ, технически субтитр находится дважды ... подмножество представляет собой отдельный список, но две строки в таблице соответствуют критериям, поэтому вы получаете 4. При выполнении count (*) == 1, только 2 строки соответствуют этим критериям, вот почему.

0 голосов
/ 10 ноября 2018

Вы можете использовать GROUP BY в основном запросе,

select     min(BOOKID) as BOOKID
from       BOOKS
where      TITLE = 'The Lord of the Rings'
group by   SUBTITLE

Гарантируется, что в каждом уникальном SUBTITLE (минимум BOOKID) будет ровно одна строка. Для вашего примера вы получите 1000, 1001, 1003, как требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...