在Oracle SQL列中查找重复项

pro*_*owl 7 sql oracle

我搜索了列中的重复条目Oracle:在select查询中找到重复的行,但似乎无法得到任何答案...

我有一些看起来像这样的数据

columnA    columnB    columnC
1111111    emailID1   true
1111111    emailID2   false
1111222    emailID3   true
1111339    emailID4   true
2384398    emailID5   true
Run Code Online (Sandbox Code Playgroud)

我想只显示这些列在columnA中具有相同值但在columnB和/或C中可能不同的列:

columnA    columnB    columnC
1111111    emailID1   true
1111111    emailID2   false
Run Code Online (Sandbox Code Playgroud)

使用>> 1似乎并没有抓住这个,任何想法?谢谢.

das*_*ght 7

使用having count(*) > 1只是拼图的一半.另一半是获得相应的行.

你可以这样做:

SELECT *
FROM MyTable
WHERE ColumnA IN (
    SELECT ColumnA FROM MyTable GROUP BY ColumnA HAVING COUNT(*) > 1
)
Run Code Online (Sandbox Code Playgroud)


Boh*_*ian 5

试试这个:

SELECT t.*
FROM (SELECT ColumnA FROM MyTable GROUP BY ColumnA HAVING COUNT(*) > 1) dups
JOIN MyTable t ON t.ColumnA = dups.ColumnA
Run Code Online (Sandbox Code Playgroud)

只要索引打开,这也可以很好地扩展ColumnA:

create index MyTable_ColumnA on MyTable(ColumnA);
Run Code Online (Sandbox Code Playgroud)

这样的索引将用于主查询和内部查询,为您提供非常好的性能.


小智 0

SELECT T.columnA, S.columnB, S.columnC FROM
(
SELECT columnA FROM someTable 
GROUP BY columnA
HAVING COUNT(*) > 1
) T INNER JOIN someTable S ON T.columnA = S.columnA 
Run Code Online (Sandbox Code Playgroud)