选择在相关表中具有两个值的行

时间:2018-01-29 21:20:41

标签: sql postgresql select

我有两张这两张桌子:

ID   Name           ID   AuthorID   Title
---------           ---------------------
1    John           1    1          Blue
2    Jack           2    1          Yellow
3    Joe            3    2          Blue
                    4    3          Blue

如何选择包含名为BlueYellow的图书的作者。我知道我可以查询书籍IN ('Blue', 'Yellow')的作者,但我很难在最终结果中分组(并要求)这两本书。

2 个答案:

答案 0 :(得分:1)

您可以使用聚合和having

select authorid
from table2
where title in ('Blue', 'Yellow')
group by authoid
having count(distinct title) = 2;

您可以使用其他join来引入作者姓名。

答案 1 :(得分:1)

调用第一个表AUTHORS和第二个表AUTHOR_TITLE,使用count distinct和IN的条件。

SELECT A.ID, A.NAME 
FROM
AUTHORS A
INNER JOIN
AUTHOR_TITLE B
ON A.ID = B.AUTHORID
AND B.TITLE IN ('BLUE','YELLOW')
GROUP BY A.ID, A.NAME
HAVING COUNT(DISTINCT B.TITLE) = 2;