这是我的假设表格,(我们称之为表格观看)
MovieID, UserID, Date
---------------------
1 1 June
1 2 June
2 3 July
2 2 August
3 1 August
3 2 August
4 1 August
我想让用户1或2只观看所有电影。所以,在这种情况下,结果应该是:
MovieID
--------
1
3
4
所以,我想写一个像
这样的查询SELECT MovieID FROM Watched GROUP BY MovieID HAVING ALL UserID in (1,2)
它不起作用。我不确定是否有另一个有效的查询,就像我现在想的那样。我想的是以下几点,
这样做的正确方法是什么?
PS:我正在使用Oracle Database 12c。
答案 0 :(得分:1)
消除拥有另一个用户而不是1或2的组
您走在正确的轨道上,但您不需要GROUP BY
- 您可以使用DISTINCT
代替。要获得您正在寻找的结果,可以使用NOT IN
代替HAVING
:
SELECT DISTINCT
MovieID
FROM Watched
WHERE MovieID NOT IN
( SELECT MovieID FROM Watches
WHERE UserID NOT IN (1,2))