2010-07-04 27 views
3

J'ai une table avec quatre colonnes, où col1 & col2 contiennent des valeurs similaires (INT). Je veux maintenant savoir s'il y a des doublons dans col1 et/ou col2. à savoir,SQL - trouver des doublons dans deux colonnes

col1 | col2 
-----+----- 
111 | 222 
333 | 444 
111 | 333 
555 | 111 

→ Doublons: 111 (3x) et 333 (2x). J'utilise SQLite, mais je pense que c'est une question SQL de base.

Répondre

6

Pour obtenir un compte de chaque UNION utilisation des éléments ALL dans une sous-requête, puis GROUP BY sur le résultat de cette:

SELECT col, COUNT(*) 
FROM 
(
    SELECT col1 AS col FROM Table1 
    UNION ALL 
    SELECT col2 FROM Table1 
) T1 
GROUP BY col 

Ajouter HAVING COUNT(*) > 1 si vous souhaitez voir uniquement les valeurs dupliquées.

+0

fraîche - c'est exactement ce que je cherche. Merci beaucoup! – mspoerr

-1

Joignez-vous à la table pour voir s'il y a des doublons.

select t1.col1, t2.col2 
from table t1 inner join table t2 
    on t1.col1 = t2.col2 
1

Si vous avez deux colonnes où les valeurs sont compatibles (qui est, 333 dans une colonne représente la même « chose » que 333 dans l'autre colonne), alors on appelle cela groupes répétitifs. Ceci est une violation de First Normal Form.

Si les valeurs étaient dans une seule colonne, les doublons seraient faciles à trouver:

CREATE TABLE pairs (
    pair_id INT, 
    value INT, 
    PRIMARY KEY (pair_id, value) 
); 

INSERT INTO pairs VALUES 
(1, 111), (1, 222), 
(2, 333), (2, 444), 
(3, 111), (3, 333), 
(4, 555), (4, 111); 

SELECT value, COUNT(*) 
FROM pairs 
GROUP BY value 
HAVING COUNT(*) > 1; 
Questions connexes