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

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

最佳答案

这将显示所有重复项,并排序在一起:

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/

相关文章:

PHP 和 Mysql - 嵌套循环

Python (2.7) 队列重复

javascript - 根据两个条件(重复的 mac 地址和使用条件小于或大于)从 JavaScript 中的对象数组中删除对象

mysql - 在一个查询中计算多个记录计数

php - 导入SQL文件时自动递增

mysql - 尝试通过 SSH 连接到远程数据库时 SSH 端口转发失败

MySQL - 无法创建/写入文件错误

algorithm - 查找具有重复项的数组的排列。为什么在递归中按值传递(C++实现)

Python 字数统计不起作用

database - 在 Oracle 中查找重复数据