如何在Oracle的表中找到重复的值?

时间:2020-03-05 18:52:18  来源:igfitidea点击:

什么是最简单的SQL语句,它将返回给定列的重复值及其在Oracle数据库表中的出现次数?

例如:我有一个带有JOB_NUMBER列的JOBS表。如何确定我是否有任何重复的" JOB_NUMBER",以及它们被重复了多少次?

解决方案

回答

select column_name, count(column_name)
from table
group by column_name
having count (column_name) > 1;

回答

我能想到的最简单的方法是:

select job_number, count(*)
from jobs
group by job_number
having count(*) > 1;

回答

怎么样:

SELECT <column>, count(*)
FROM <table>
GROUP BY <column> HAVING COUNT(*) > 1;

为了回答上面的示例,它看起来像:

SELECT job_number, count(*)
FROM jobs
GROUP BY job_number HAVING COUNT(*) > 1;

回答

正在做

select count(j1.job_number), j1.job_number, j1.id, j2.id
from   jobs j1 join jobs j2 on (j1.job_numer = j2.job_number)
where  j1.id != j2.id
group by j1.job_number

将为我们提供重复的行的ID。

回答

其他方式:

SELECT *
FROM TABLE A
WHERE EXISTS (
  SELECT 1 FROM TABLE
  WHERE COLUMN_NAME = A.COLUMN_NAME
  AND ROWID < A.ROWID
)

当" column_name"上有索引时,工作正常(足够快)。这是删除或者更新重复行的更好方法。

回答

如果我们不需要知道重复的实际数量,则甚至不需要在返回的列中进行计数。例如

SELECT column_name
FROM table
GROUP BY column_name
HAVING COUNT(*) > 1