SQL - 查找两列中的重复项

3
我有一张四列的表格,其中col1col2包含类似的值(INT)。现在我想知道col1和/或col2中是否存在重复值。即,
col1 | col2
-----+-----
111  | 222
333  | 444
111  | 333
555  | 111

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

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

3个回答

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
如果您有两列值是兼容的(也就是说,一列中的333表示与另一列中的333相同的“事物”),那么这被称为重复组。这违反第一范式
如果这些值在单个列中,寻找重复项就很容易:
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;

-1

将表格自连接以查看是否存在重复项。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接