查找 MySQL 数据库中两列组合的重复项
Posted
技术标签:
【中文标题】查找 MySQL 数据库中两列组合的重复项【英文标题】:Find duplicates for combination of two columns in a MySQL database 【发布时间】:2013-04-17 21:29:07 【问题描述】:我处理包含三个不同列的数据集:pile
、position
和 info
。
数据库中没有重复,但有可能发生,对于pile
和position
的一种组合,信息列中有一两个不同的文本。这些是我试图找到的条目。
我尝试了以下
SELECT COUNT(DISTINCT(`pile`, `position`)) FROM db;
但收到错误消息
ERROR 1241 (21000): Operand should contain 1 column(s)
有没有办法在两列中找到不同的值组合?
【问题讨论】:
试试这个SELECT COUNT(DISTINCT(pile
+position
)) FROM db;
【参考方案1】:
即使没有子选择也可以使用。
SELECT
`pile`,
`position`,
COUNT(*) AS c
FROM
db
GROUP BY
`pile`,
`position`
HAVING c > 1;
上面的命令显示了pile
和position
在表db
中出现多次的所有组合。
【讨论】:
获得副本从未如此简单。谢谢你。【参考方案2】:获取不同重复项的计数(此处优先使用分组)
select count(*)
from (
select pile, position
from db
group by pile, position
) x
要查找实际的重复记录
select db.*
from (
select pile, position
from db
group by pile, position
having count(*) > 1
) x
join db on db.pile = x.pile and db.position = x.position
【讨论】:
【参考方案3】:SELECT *
FROM db x
WHERE EXISTS (
SELECT 1 FROM db y
WHERE y.pile = x.pile
AND y.position =x.postion
AND y.other_field <> x.other_field
);
现在,对于other_field
,您可以使用一些唯一的 id 列,或任何字段组合(当然 pole, postion 除外)
【讨论】:
以上是关于查找 MySQL 数据库中两列组合的重复项的主要内容,如果未能解决你的问题,请参考以下文章