2009-10-03 5 views
1

Pour ce tableau:Distinct multi-colonnes

mysql> select * from work; 
+------+---------+-------+ 
| code | surname | name | 
+------+---------+-------+ 
| 1 | John | Smith | 
| 2 | John | Smith | 
+------+---------+-------+ 

Je voudrais obtenir la paire de code où les noms sont égaux, donc je le fais:

select distinct A.code, B.code from work A, work B where A.name = B.name group by A.code, B.code; 

Cependant, je reçois le résultat de suivi de retour:

+------+------+                       
| code | code |                       
+------+------+                       
| 1 | 1 | 
| 1 | 2 | 
| 2 | 1 | 
| 2 | 2 | 
+------+------+ 

Comme vous pouvez le voir, ce résultat a 2 doublons, de toute évidence d'un produit cartésien. Je voudrais savoir comment je peux faire ceci tel qu'il sort seulement:

+------+------+                       
| code | code |                       
+------+------+                       
| 1 | 2 | 
+------+------+ 

Une idée? Merci!

Répondre

2

Cela devrait fonctionner (en supposant code est la clé primaire):

SELECT A.code, B.code 
FROM work A, work B 
WHERE A.name = B.name AND A.code < B.code 
2

essayer cette

Select A.Code, B.Code 
    From work a 
    Join work b 
     On A.surname = b.surname 
      And A.Name = B.Name 
      And A.Code > B.Code 

Vous devez utiliser A.Code> B.Code plutôt que! = Pour éliminer dupes du type

{1, 2} et {2, 1}

(Si vous ne vous préoccupez lorsque le nom est le même et non le nom de famille, éliminer ce prédicat de la condition de jointure)