首页 > 解决方案 > 选择 3 列或更多列重复的表的 ID

问题描述

我正在尝试选择表中包含相同数据的 3 列的 id,但第一次插入重复项时除外。例如我的表如下:

Select * From Workers

+----+--------+--------+--------------+
| id | name   |JobTitle| description  |    
+----+--------+--------+--------------+    
| 1  | john   |Plumber |Installs Pipes|    
| 2  | mike   | Doctor |Provides Meds |   
| 3  | john   |Plumber |Installs Pipes|    
| 4  | john   |Plumber |Installs Pipes|    
| 5  | mike   | Doctor |Provides Meds |    
| 6  | mike   | Doctor |Provides Meds |   
+----+--------+--------+--------------+

我基本上试图得到的是所有重复记录的 id,期望出现重复的最低或第一个 id。

SELECT t1.id 
From workers t1, workers t2
Where t1.id > t2.Id and t1.name = t2.name and t1.jobTitle = t2.jobTitle and t1.description = t2.description;

我正在使用的表有数十万条记录,我已经尝试了上面的语句来获取我想要的 id,但是由于表的大小,我得到了错误:

错误代码:1054。“where 子句”中的未知列“t1.userId”

我曾尝试增加工作台中的超时时间,但无济于事。在这个例子中,我基本上试图获取除 1 和 2 之外的所有 id。我认为上面的查询会得到我正在寻找的东西,但事实并非如此,现在我不确定还有什么可以尝试的。

任何帮助是极大的赞赏。提前致谢。

标签: mysqlmysql-workbench

解决方案


错误消息与您的查询不匹配(查询中没有userId列) - 它与表的大小无关。

无论如何,我会过滤exists

select w.*
from workers w
where exists (
    select 1
    from workers w1
    where
        w1.name = w.name
        and w1.jobTitle = w.jobTitle
        and w1.description = w.description
        and w1.id < w.id
)

对于性能,请考虑在(name, jobTitle, description, id).


推荐阅读