选择包含相同值的行
Posted
技术标签:
【中文标题】选择包含相同值的行【英文标题】: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 因为它们共享相同的电影。
【问题讨论】:
【参考方案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
【讨论】:
以上是关于选择包含相同值的行的主要内容,如果未能解决你的问题,请参考以下文章