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
);
我的详细信息
表如下:
book_id lang 1 English 1 Spanish 1 French 2 English 3 Spanish 3 French 4 German 4 English
我如何选择哪些书只使用English
编写,比如book_id=2?
当我编写代码时,我收到which book_id的包含'English‘lang,但是我想要得到的书只有一种语言,而且这种语言是'English’。
您可以使用不存在
:
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';
假设lang/code>从不
null
,使用having
子句设置条件:
SELECT name
FROM books
WHERE book_id IN (
SELECT book_id
FROM details
GROUP BY book_id
HAVING SUM(lang <> 'English') = 0
)