获取MySql中重复行的列表
问题出现的原因是需要在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中执行上述查询语句来获取重复行的列表了。
问题的原因是需要在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中的重复行列表了。
问题的原因是想要获取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
尽管没有测试过,但这个查询语句不会返回所有行,只会找到重复的行。
这种方法太耗费资源,可以使用一个简单的连接来解决(参见我的答案)