我有一个类似于:
的MySQL数据库+----+---------+---------+------------------+....
| id | unique1 | unique2 | genaric_data |....
+----+---------+---------+------------------+....
| 0 | 100 | 1C7 | {data container} |....
+----+---------+---------+------------------+....
| 1 | 100 | 1C7 | {data container} |....
+----+---------+---------+------------------+....
| 2 | 100 | 1C8 | {data container} |....
+----+---------+---------+------------------+....
| 3 | 101 | --- | {data container} |....
+----+---------+---------+------------------+....
| 4 | 102 | 0 | {data container} |....
+----+---------+---------+------------------+....
| 5 | 103 | 1 | {data container} |....
.................................................
我需要一种方法来添加一个额外的列,该列给出了使用所有唯一字段的次数。然后我需要手动清理数据。
我想要一个返回的查询:
+----+---------+---------+------+------------------+....
| id | unique1 | unique2 | dupe | genaric_data |....
+----+---------+---------+------+------------------+....
| 0 | 100 | 1C7 | 2 | {data container} |....
+----+---------+---------+------+------------------+....
| 1 | 100 | 1C7 | 2 | {data container} |....
+----+---------+---------+------+------------------+....
| 2 | 100 | 1C8 | 1 | {data container} |....
+----+---------+---------+------+------------------+....
| 3 | 101 | --- | 1 | {data container} |....
+----+---------+---------+------+------------------+....
| 4 | 102 | 0 | 1 | {data container} |....
+----+---------+---------+------+------------------+....
| 5 | 103 | 1 | 1 | {data container} |....
.......................................................
这是我一段时间以来遇到的问题,目前我唯一的解决方案是将数据导出到Excel并使用它来查找重复项。
感谢。
编辑: 从我执行以来,可能的重复不是解决我的问题的方法:
SELECT *,count(*) FROM `database`
GROUP BY `unique1`
HAVING count(*) > 1
在PhpMyAdmin上(所有我允许访问)它将具有相同unique1的任何内容合并为一行。
答案 0 :(得分:3)
您的问题的解决方案是使用GROUP BY:
SELECT unique1, unique2, Count(*) As colCount FROM YourTable
GROUP BY unique1, unique2
HAVING Count(*) > 1
这将返回不止一次出现的unique1和unique2的所有组合。
在第二步中,您可以构建一个返回所有受影响行的查询。
SELECT YourTable.*, rstDuplicates.colCount
FROM YourTable INNER JOIN (
SELECT unique1, unique2, Count(*) As colCount FROM YourTable
GROUP BY unique1, unique2
HAVING Count(*) > 1
) As rstDuplicates ON YourTable.unique1 = rstDuplicates.unique1 And YourTable.unique2 = rstDuplicates.unique2
这将输出至少有一个重复的所有行。 colCount
列显示了出现次数。
答案 1 :(得分:1)
如果要添加包含信息的字段,则相关子查询可能是最简单的方法:
select t.*,
(select count(*)
from table t2
where t2.unique1 = t.unique1 and t2.unique2 = t.unique2
) as dupecnt
from table t;
有时,这是有效的(索引在unique1, unique2
。有时,在from
子句中进行聚合更有效:
select t.*, t2.dupecnt
from table t join
(select unique1, unique2, count(*) as dupecnt
from table t2
group by unique1, unique2
) t2
on t2.unique1 = t.unique1 and t2.unique2 = t.unique1