假设我想要更改表,使我的主键如下所示
user_id、round、tournament_id
目前有重复的内容需要清理。查找所有重复项的查询是什么?
这是针对MySQL的,我希望看到重复的行
发布于 2011-05-09 05:28:42
从技术上讲,您不需要这样的查询;任何称职的RDBMS都不允许插入会在表中产生重复主键的行。这样的事情违反了主键的定义。
但是,如果您希望在将主键应用于包含这些列的表之前,编写一个查询来查找这些列组的重复项,那么这就是您想要的:
select
t.user_id, t.round, t.tournament_id
from
table as t
group by
t.user_id, t.round, t.tournament_id
having
count(*) > 1上面的代码只会给出组合中包含多行的列的组合,如果您想要查看行中的所有列,则可以执行以下操作:
select
o.*
from
table as o
inner join (
select
t.user_id, t.round, t.tournament_id
from
table as t
group by
t.user_id, t.round, t.tournament_id
having
count(*) > 1
) as t on
t.user_id = o.user_id and
t.round = o.round and
t.tournament_id = o.tournament_id请注意,如果需要多次使用结果,还可以创建一个temporary table并在其上进行联接。
发布于 2011-05-09 05:29:45
SELECT name, COUNT(*) AS counter
FROM customers
GROUP BY name
HAVING COUNT (*) > 1这就是你要找的。
在table中
ID NAME email
-- ---- -----
1 John Doe john@teratrax.com
2 Mark Smith marks@teratrax.com
3 John Doe jdoe@company.com将会返回
name counter
---- -------
John Doe 2发布于 2011-05-09 05:30:00
假设您有一个包含这三列的表,或者您可以使用这三列创建并填充一个表,则此查询将显示重复项。
select user_id, round, tournament_id
from yourtable
group by user_id, round, tournament_id
having count(*) > 1https://stackoverflow.com/questions/5930475
复制相似问题