一起使用 Having 语句和 In 语句
Using Having statement and In Statement together
这是我的假设 table,(我们称之为 Table 已观看)
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)
它不起作用。我不确定是否有另一个工作查询与我现在的想法相同。我的想法如下,
- 用 MovieID 对所有记录进行分组
- 消除除 1 或 2 之外的其他用户的组
正确的做法是什么?
PS:我正在使用 Oracle Database 12c。
Eliminate the groups which has another user than 1 or 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))
这是我的假设 table,(我们称之为 Table 已观看)
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)
它不起作用。我不确定是否有另一个工作查询与我现在的想法相同。我的想法如下,
- 用 MovieID 对所有记录进行分组
- 消除除 1 或 2 之外的其他用户的组
正确的做法是什么?
PS:我正在使用 Oracle Database 12c。
Eliminate the groups which has another user than 1 or 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))