mysql根据IN语句中的配对值选择行

时间:2012-03-03 00:29:49

标签: mysql duplicates

基本上我想做:

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分钟才能完成:\

1 个答案:

答案 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)上的索引有助于上述内容以及您的加入版本。