基本上我想做:
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 分钟才能完成:\
最佳答案
这将显示所有重复项,并排序在一起:
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)
上的索引将有助于上述内容 - 以及您的 Join 版本。
关于mysql 根据 IN 语句中的配对值选择行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9542246/