基本上我想做:
SELECT * FROM `table`
WHERE ( `col1`, `col2`)
IN
[
SELECT `col1`, `col2`
FROM `table`
GROUP BY `col1`, `col2`
HAVING count(*) >1
]
我希望选择所有唯一的重复项及其实际重复项。 但是如何保持col1和col2之间的关系与IN查询相关?
我知道还有其他方法可以做到这一点。
一种方法是构建一个虚拟表,将所有相关条目移动到它,然后替换原始。
另一个使用类似的连接:
SELECT *
FROM table t1
JOIN table t2
ON t1.id > t2.id
AND t1.col1 = t2.col1
AND t1.col2 = t2.col2;
但这需要大约10分钟才能完成:\
答案 0 :(得分:1)
这将显示所有重复项,一起排序:
SELECT
t.*
FROM
tableX AS t
JOIN
( SELECT col1, col2
FROM tableX
GROUP BY col1, col2
HAVING COUNT(*) > 1
) AS td
ON (td.col1, td.col2) = (t.col1, t.col2)
ORDER BY
t.col1, t.col2
(col1, col2)
上的索引有助于上述内容以及您的加入版本。