SELECT name
FROM books
WHERE book_id IN (
SELECT book_id
FROM details
WHERE lang IN ('English')
GROUP BY book_id
HAVING COUNT(book_id)=1
);
我的details
表如下:
book_id lang 1 English 1 Spanish 1 French 2 English 3 Spanish 3 French 4 German 4 English
如何选择English
中仅 写哪些书,例如book_id = 2?
当我编写代码时,我会收到book_id包含“英语” lang的语言,但是我想获得的书中的语言恰好是一种,而该语言是“英语”。
答案 0 :(得分:0)
您可以使用not exists
:
select b.*
from books b
where not exists (select 1
from details d
where d.book_id = b.book_id and
d.lang <> 'English'
);
那是:除了英语,没有其他语言。
注意:如果一本书没有详细信息,则还将退还该书。如果要避免这种情况,可以使用聚合:
select b.*
from books b join
details d
using (book_id)
group by b.book_id
having min(lang) = 'English' and max(lang) = 'English';
答案 1 :(得分:0)
假设lang
从不null
,请使用HAVING
子句设置条件:
SELECT name
FROM books
WHERE book_id IN (
SELECT book_id
FROM details
GROUP BY book_id
HAVING SUM(lang <> 'English') = 0
)