【发布时间】: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 因为它们共享相同的电影。
【问题讨论】:
我需要提取包含完全相同电影的 storeID 对,以该表为例
| storeID | movieID |
|---|---|
| 1 | a |
| 1 | b |
| 1 | c |
| 2 | a |
| 2 | b |
| 2 | c |
| 3 | d |
结果查询应该是 storeID 1 和 storeID 2 因为它们共享相同的电影。
【问题讨论】:
这个查询:
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
【讨论】:
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
【讨论】: