【问题标题】:Select rows that contain the same values选择包含相同值的行
【发布时间】:2021-07-20 02:58:55
【问题描述】:

我需要提取包含完全相同电影的 storeID 对,以该表为例

storeID movieID
1 a
1 b
1 c
2 a
2 b
2 c
3 d

结果查询应该是 storeID 1 和 storeID 2 因为它们共享相同的电影。

【问题讨论】:

    标签: mysql database


    【解决方案1】:

    这个查询:

    SELECT storeID, GROUP_CONCAT(movieID ORDER BY movieID) movies
    FROM tablename
    GROUP BY storeID
    

    以逗号分隔列表的形式返回每个商店的所有电影。
    将其用作 CTE 并通过 self join 获得具有相同电影的商店对:

    WITH cte AS (
      SELECT storeID, GROUP_CONCAT(movieID ORDER BY movieID) movies
      FROM tablename
      GROUP BY storeID
    )
    SELECT c1.storeID storeID1, c2.storeID storeID2
    FROM cte c1 INNER JOIN cte c2
    ON c1.movies = c2.movies AND c1.storeID < c2.storeID 
    

    【讨论】:

    • 想象一下 10 个(或 100 个)storeID 具有相同的 movieID 列表...您的输出将太长。
    • @Akina 我需要提取包含完全相同电影的 storeID 对这是要求。
    • 确实如此。也许这个变种真的更适合OP。
    【解决方案2】:
    WITH cte AS ( SELECT storeID, GROUP_CONCAT(movieID ORDER BY movieID) movies
                  FROM table 
                  GROUP BY storeID )
    SELECT GROUP_CONCAT(storeID) 
    FROM cte
    GROUP BY movies
    HAVING COUNT(*) > 1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-19
      • 2017-06-11
      • 1970-01-01
      • 1970-01-01
      • 2020-05-14
      • 2023-03-18
      • 1970-01-01
      相关资源
      最近更新 更多