2010-07-04 4 views
3

У меня есть таблица с четырьмя столбцами, где col1 & col2 содержат похожие значения (INT). Теперь я хочу знать, есть ли дубликаты в col1 и/или col2. т.е.SQL - найти дубликаты в двух столбцах

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

→ Дубликаты: 111 (3x) и 333 (2x).

Я использую SQLite, но я думаю, что это основной вопрос SQL.

ответ

6

Чтобы получить количество каждого элемента используют UNION ALL в подзапрос, затем GROUP BY в результате чего:

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

Добавить HAVING COUNT(*) > 1 если вы только хотите, чтобы увидеть дублированные значения.

+0

круто - это именно то, что я ищу. Большое спасибо! – mspoerr

-1

Подключитесь к таблице, чтобы увидеть, есть ли дубликаты.

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

Если у вас есть два столбца, где значения совместимы (то есть, 333 в один столбец представляет один и тот же «вещь», как 333 в другой колонке), то это называется повторяющихся групп. Это является нарушением First Normal Form.

Если значения находились в одной колонке, поиска дубликатов будет легко:

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; 
Смежные вопросы