如何从相同的 table 中获取重复的行
How to fetch duplicate rows from the same table
假设我有一个 table 比如:
ID
valA
valB
valC
1
21
aaaaa
NYC
4
12
bbbbb
NYC
2
31
ddddd
LA
2
23
eeeee
LA
2
41
fffff
NE
3
23
ggggg
JE
3
44
hhhhh
KA
我想比较行以找到具有特定数据匹配的行。在这种情况下,我想识别具有匹配 ID 和 valC 的行。 valA 和 valB 列的内容将被忽略。
所以,它应该只找到这两行:
ID
valA
valB
valC
2
31
ddddd
LA
2
23
eeeee
LA
我尝试使用“count()”和“inner Join”进行一些操作,但没有得到我期望的结果。
我是 SQL 的新手,所以我将不胜感激任何提示和建议。
一种方法,使用解析函数:
WITH cte AS (
SELECT t.*, COUNT(*) OVER (PARTITION BY ID, valC) cnt
FROM yourTable t
)
SELECT ID, valA, valB, valC
FROM cte
WHERE cnt > 1;
通过过滤连续存储的 id
、valc
的替代方法:
SELECT
*
FROM table_name
WHERE id||valc in
(SELECT
id||valc
FROM
TABLE_NAME
GROUP BY (id_, valc)
HAVING count(1) > 1);
假设我有一个 table 比如:
ID | valA | valB | valC |
---|---|---|---|
1 | 21 | aaaaa | NYC |
4 | 12 | bbbbb | NYC |
2 | 31 | ddddd | LA |
2 | 23 | eeeee | LA |
2 | 41 | fffff | NE |
3 | 23 | ggggg | JE |
3 | 44 | hhhhh | KA |
我想比较行以找到具有特定数据匹配的行。在这种情况下,我想识别具有匹配 ID 和 valC 的行。 valA 和 valB 列的内容将被忽略。 所以,它应该只找到这两行:
ID | valA | valB | valC |
---|---|---|---|
2 | 31 | ddddd | LA |
2 | 23 | eeeee | LA |
我尝试使用“count()”和“inner Join”进行一些操作,但没有得到我期望的结果。
我是 SQL 的新手,所以我将不胜感激任何提示和建议。
一种方法,使用解析函数:
WITH cte AS (
SELECT t.*, COUNT(*) OVER (PARTITION BY ID, valC) cnt
FROM yourTable t
)
SELECT ID, valA, valB, valC
FROM cte
WHERE cnt > 1;
通过过滤连续存储的 id
、valc
的替代方法:
SELECT
*
FROM table_name
WHERE id||valc in
(SELECT
id||valc
FROM
TABLE_NAME
GROUP BY (id_, valc)
HAVING count(1) > 1);