2010-07-04 96 views
3

我有一個四列的表,其中col1 & col2包含相似的值(INT)。我現在想知道col1和/或col2是否有重複。即,SQL - 查找兩列中的重複項

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

→重複:111(3x)和333(2×)。

我正在使用SQLite,但我認爲這是一個基本的SQL問題。

回答

6

爲了讓每一個元素使用UNION的計數都在一個子查詢,然後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 2010-07-04 22:21:08

-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;