Let's say I had a MySQL database with the following five records in a table:
ID: 1
Field1: A
Field2: B
Field3: C
ID: 2
Field1: D
Field2: E
Field3: F
ID: 3
Field1: A
Field2: H
Field3: I
ID: 4
Field1: J
Field2: K
Field3: A
ID: 5
Field1: M
Field2: D
Field3: O
Notice that the following values are duplicated:
ID 1, field 1 has the same value as ID 3, field 1 and ID 4, field 3.
ID 2, field 1 has the same value as ID 5, field 2.
Is there a SELECT statement that could find all of the above duplicates?
it is doable but not sure if it is any more efficient than just doing it at the application level:
your table:
mysql> select * from test;
+----+--------+--------+--------+
| id | field1 | field2 | field3 |
+----+--------+--------+--------+
| 1 | A | B | C |
| 2 | D | E | F |
| 3 | A | H | I |
| 4 | J | K | A |
| 5 | M | D | O |
+----+--------+--------+--------+
5 rows in set (0.00 sec)
the select to find dupes:
mysql> select count(value) as dupe_count,value from (select field1 as value from test union all select field2 from test union all select field3 from test) as tbl group by value having count(value) > 1 order by 1 desc;
+------------+-------+
| dupe_count | value |
+------------+-------+
| 3 | A |
| 2 | D |
+------------+-------+
2 rows in set (0.00 sec)
basically you union the three columns into one then look for dupes
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With