【问题标题】:Using Having statement and In Statement together一起使用 Have 语句和 In 语句
【发布时间】:2015-02-04 21:32:57
【问题描述】:

这是我假设的表格,(我们称之为 Table Watched)

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. 消除除 1 或 2 之外的其他用户的组

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

PS:我使用的是 Oracle Database 12c。

【问题讨论】:

    标签: sql group-by having oracle12c


    【解决方案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))
    

    【讨论】:

      猜你喜欢
      • 2017-11-10
      • 1970-01-01
      • 2012-12-24
      • 2020-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多