一起使用Having语句和In语句

时间:2015-02-04 21:32:57

标签: sql group-by having oracle12c

这是我的假设表格,(我们称之为表格观看)

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)

它不起作用。我不确定是否有另一个有效的查询,就像我现在想的那样。我想的是以下几点,

  1. 使用MovieID
  2. 对所有记录进行分组
  3. 消除拥有另一个用户而非1或2
  4. 的群组

    这样做的正确方法是什么?

    PS:我正在使用Oracle Database 12c。

1 个答案:

答案 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))