SQL - 在两列中查找重复项

时间:2010-07-04 22:12:46

标签: sql sqlite

我有一个包含四列的表格,其中col1& col2包含类似的值(INT)。我现在想知道col1和/或col2中是否有重复项。即,

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

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

我正在使用SQLite,但我认为这是一个基本的SQL问题。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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;

答案 2 :(得分:-1)

将表连接到自身以查看是否有任何重复。

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