Hello:

    I have the following table

select * from addressbook
+----+--------------------+
| id | email              |
+----+--------------------+
|  1 | [EMAIL PROTECTED] |
|  2 | [EMAIL PROTECTED] |
|  3 | [EMAIL PROTECTED] |
+----+--------------------+
3 rows in set (0.00 sec)

Now i wanted to find a list of duplicate contacts wherein i can get
the 1st contact with same email
and merge with the others. so in the above case id 1 has duplicates 2
and 3, 2 has 1 & 3 and 3 and 1 & 2.

I'm only interested in getting the first set of duplicates i.e. "1 has
duplicates 2 & 3".

So i tried the query
select t1.id as id1, t2.id as id2, t1.email as email1, t2.email as email2
from addressbook t1, addressbook t2
where t1.email = t2.email and t1.id != t2.id
order by t1.id
+-----+-----+--------------------+--------------------+
| id1 | id2 | email1             | email2             |
+-----+-----+--------------------+--------------------+
|   1 |   2 | [EMAIL PROTECTED] | [EMAIL PROTECTED] |
|   1 |   3 | [EMAIL PROTECTED] | [EMAIL PROTECTED] |
|   2 |   1 | [EMAIL PROTECTED] | [EMAIL PROTECTED] |
|   2 |   3 | [EMAIL PROTECTED] | [EMAIL PROTECTED] |
|   3 |   1 | [EMAIL PROTECTED] | [EMAIL PROTECTED] |
|   3 |   2 | [EMAIL PROTECTED] | [EMAIL PROTECTED] |
+-----+-----+--------------------+--------------------+

then i tried the query similar to the one suggested in the MySQL
Cookbook Recipe 14.5

select DISTINCT if(t1.id < t2.id, t1.id, t2.id) as id1,
       if(t1.id < t2.id, t1.email, t2.email) as email1,
       if(t1.id < t2.id, t2.id, t1.id) as id2,
       if(t1.id < t2.id, t2.email, t1.email) as email2
from addressbook t1, addressbook t2
where t1.email = t2.email and t1.id != t2.id
order by t1.id
+-----+--------------------+-----+--------------------+
| id1 | email1             | id2 | email2             |
+-----+--------------------+-----+--------------------+
|   1 | [EMAIL PROTECTED] |   2 | [EMAIL PROTECTED] |
|   1 | [EMAIL PROTECTED] |   3 | [EMAIL PROTECTED] |
|   2 | [EMAIL PROTECTED] |   3 | [EMAIL PROTECTED] |
+-----+--------------------+-----+--------------------+

I'm stuck trying to get a query that will give me only
+-----+--------------------+-----+--------------------+
| id1 | email1             | id2 | email2             |
+-----+--------------------+-----+--------------------+
|   1 | [EMAIL PROTECTED] |   2 | [EMAIL PROTECTED] |
|   1 | [EMAIL PROTECTED] |   3 | [EMAIL PROTECTED] |
+-----+--------------------+-----+--------------------+

Any help, feeback is deeply appreciated. Thanks a bunch in advance.

Yashesh Bhatia

-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to