我有一个四列的表,其中col1
& col2
包含相似的值(INT)。我现在想知道col1
和/或col2
是否有重复。即,SQL - 查找两列中的重复项
col1 | col2
-----+-----
111 | 222
333 | 444
111 | 333
555 | 111
→重复:111
(3x)和333
(2×)。
我正在使用SQLite,但我认为这是一个基本的SQL问题。
我有一个四列的表,其中col1
& col2
包含相似的值(INT)。我现在想知道col1
和/或col2
是否有重复。即,SQL - 查找两列中的重复项
col1 | col2
-----+-----
111 | 222
333 | 444
111 | 333
555 | 111
→重复:111
(3x)和333
(2×)。
我正在使用SQLite,但我认为这是一个基本的SQL问题。
为了让每一个元素使用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
如果你只希望看到重复的值。
将表加入自己以查看是否有任何重复项。
select t1.col1, t2.col2
from table t1 inner join table t2
on t1.col1 = t2.col2
如果你有两列其中的值是兼容的(即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;
冷静 - 这正是我所期待的。非常感谢你! – mspoerr 2010-07-04 22:21:08