8

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?

1 Answer 1

6

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

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.