2010-07-04 93 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;