2009-02-24 4 views
0

Je le tableau suivant:SQL sélectionnez l'emplacement où la répétition, mais distincte sur une autre colonne

uid | key | email 
----------------- 
1 | 1 | [email protected] 
2 | 2 | [email protected] 
3 | 3 | [email protected] 
4 | 4 | [email protected] 
5 | 4 | [email protected] 
6 | 4 | [email protected] 
7 | 6 | [email protected] 
8 | 7 | [email protected] 

J'aimerais saisir toutes les lignes avec e-mail clé distincte mais répéter les valeurs

le résultat devrait ressembler à:

uid | key | email 
----------------- 
1 | 1 | [email protected] 
2 | 2 | [email protected] 
3 | 3 | [email protected] 
+0

Par "clé Distinct" faire vous voulez dire où il n'y a qu'une occurrence dans la table de cette clé. Dans votre exemple, la requête retournerait-elle les lignes pour les clés 1,2,3,6 et 7? – JohnFx

+0

non, car un courriel répété, mais la clé est également répétée et 7 n'est pas répétée nulle part. – madcolor

+0

oups .. non parce que uid 6 a un e-mail récurrent, mais la clé est également répétée .. et 7 n'a aucune répétition nulle part. – madcolor

Répondre

2
SELECT MIN(uid) as uid, key, email 
FROM Keys k INNER JOIN 
    (SELECT email FROM KEYS GROUP by email HAVING COUNT(email) > 1) k2 
    ON k.email = k2.email 
GROUP BY key, email 
HAVING COUNT(key) = 1 
1
SELECT * FROM table 
WHERE email NOT IN 
(
SELECT email 
FROM table GROUP BY email 
HAVING COUNT(email) <= 1) 
AND key IN 
(
SELECT key 
FROM table 
GROUP BY key 
HAVING COUNT(key) = 1 
) 
Questions connexes