mysql - 选择 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。我认为上面的查询会得到我正在寻找的东西,但事实并非如此,现在我不确定还有什么可以尝试的。
任何帮助是极大的赞赏。提前致谢。
解决方案
错误消息与您的查询不匹配(查询中没有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)
.
推荐阅读
- python - 'float' 对象在我的游戏中不可调用
- apache-nifi - QueryRecord - 获取最大时间戳
- azure-devops - 定期发送包含查询结果的电子邮件(每天早上 9 点):
- cadence-workflow - Autoscale Cadence 客户端消耗数百万个活动或运行数百万个工作流实例
- google-cloud-platform - Google Cloud 平台中的 Devops 项目管理板
- java - 在 Android 中使用 base64 字符串创建 JSONObject 时遇到致命异常
- python - Python XPath 排除项目
- r - AWS 多因素身份验证和闪亮服务器
- javascript - 如何避免/删除 .row 中的空格
- github - 在 GitHub 上的 Markdown 文件中应用颜色