获取MySql中重复行的列表

20 浏览
0 Comments

获取MySql中重复行的列表

我有一个像这样的表格

ID     姓     名字
1       约翰         杜
2       约翰         杜
3       吉姆          杜
4       迈克尔     约翰

我需要一个查询,返回所有具有相同姓和名字的记录的所有字段(select *)(在这种情况下,记录1和2)。

有人能帮我吗?谢谢

0
0 Comments

问题出现的原因是需要在MySQL中获取重复行的列表。解决方法是使用特定的查询语句来实现。以下是解决方法的详细说明:

要获取重复行的列表,可以使用以下查询语句:

SELECT n1.* FROM table n1
inner join table n2 on n2.vorname=n1.vorname and n2.nachname=n1.nachname
where n1.id <> n2.id

所提供的数据中有一些错误,"Doe"和"Knight"是姓而不是名。需要添加`select distinct`来确保查询结果不返回重复的行。感谢您的帮助。

如果字段"vorname"和"nachname"可为空,则应使用"coalesce"函数进行比较。有关更多信息,请参见:[mysql comparison with null value](https://stackoverflow.com/questions/9608639/62260762#62260762)

另外,还可以使用NULL安全的等于操作符`<=>`来比较可为空的列。参考:[dev.mysql.com/doc/refman/8.0/en/…](https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html#operator_equal-to)

这样,您就可以通过在MySQL中执行上述查询语句来获取重复行的列表了。

0
0 Comments

问题的原因是需要在MySQL中获取重复行的列表。解决方法是使用自连接来实现。

以下是解决问题的MySQL代码:

select distinct t1.id from t as t1 inner join t as t2 
on t1.col1=t2.col1 and t1.col2=t2.col2 and t1.id<>t2.id

上述代码中的 `t1.id<>t2.id` 是为了避免与自身匹配。如果只想要每组重复数据中的一行,可以使用 `t1.id

然而,上述代码只会返回一个包含两个匹配记录的行,而不是应该返回的两行。

实际上,如果想要返回所有重复行(而不仅仅是每组重复数据的一行),应该使用 `<>`。

这样,就可以通过自连接来获取MySQL中的重复行列表了。

0
0 Comments

问题的原因是想要获取MySql中重复行的列表。解决方法是使用查询语句来找到重复的行。

一般解决方案是使用以下形式的查询语句:

SELECT col1, col2, count(*)
FROM t1
GROUP BY col1, col2
HAVING count(*) > 1

这将为表中每组重复行返回一行。结果中的最后一列是特定值的重复次数。

如果真的想要获取ID,可以尝试以下查询语句:

SELECT id FROM 
t1, 
( SELECT col1, col2, count(*)
  FROM t1
  GROUP BY col1, col2
  HAVING count(*) > 1 ) as t2
WHERE t1.col1 = t2.col1 AND t1.col2 = t2.col2 

尽管没有测试过,但这个查询语句不会返回所有行,只会找到重复的行。

这种方法太耗费资源,可以使用一个简单的连接来解决(参见我的答案)

0