Oracle SQL中找出表中是否存在一个或多个重复项的最快方法是什么?

Christs_Chin

我正在寻找创建一条语句,该语句将在列上找到重复值的第二秒停止并返回true。我不在乎值是多少,只需要知道是否存在重复项即可。没有其他的。

我知道我可以写,Select count(*) from myTable group by primary_id having count(*) > 1;但这遍历了表的每一行,而我希望查询一旦遇到一个存在重复项的情况就立即停止。

我尝试用我知道的最好的镜头是:

 select 1 as thingy from dual outer_qry
 where exists
 (
    select * from
      (
       select some_ID, 
              case when COUNT(*) > 1 then 'X' else 'N' end as TRIG 
       from myTable 
       group by some_ID
       )INNER_QRY
       where INNER_QRY.trig = outer_qry.dummy 
 );

但是,这需要13秒,我怀疑找到第一份副本会花费这么长时间。

任何人都可以提出我的想法哪里出了问题,因为希望从我的SQL中得出的假设是,将针对为inner_qry返回的每一行检查EXISTS函数,但这似乎并非如此。

戈登·利诺夫

您将使用exists这将返回所有重复项:

select t.*
from mytable t
where exists (select 1
              from mytable t t2
              where t2.some_id = t.some_id and t2.rowid <> t.rowid
             );

在Oracle 12c中,您将添加fetch first 1 row only而且它可以利用上的索引mytable(some_id)

在早期版本中:

select 1 as HasDuplicate
from (select t.*
      from mytable t
      where exists (select 1
                    from mytable t t2
                    where t2.some_id = t.some_id and t2.rowid <> t.rowid
                   )
     ) t
where rownum = 1;

如果没有返回任何行,则没有重复项。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用 ORACLE SQL 从具有不同 ID 的同一个表中查找重复项?

Oracle SQL:是否可以将不同表中的列合并到一个表中?

如何在一个Oracle表中查找多个对

如果在一个列上满足条件,但在单独的列中存在重复项,则标记为全部-Oracle SQL

MS SqlServer中的Oracle“ Dual”表的等效项是什么?

如何在 Oracle 中编写一个简单的查询或 PL/SQL 代码来检查 order_id 是否存在于一个表中,然后再处理另一个表?

Oracle SQL-检查整个表中的重复项

使用另一个表中重复的值更新 Oracle 表中的列

oracle查询中的重复项

检查值是否存在于多个表中-Oracle SQL

在oracle中查询以从一个表中获取多个记录并输入另一个表

引用 Oracle SQL 中的一个或另一个表

Oracle中的双表是什么?

Oracle 中的远程表是什么?

一个表中的SQL更新值与Oracle SQL Developer中的另一个表的值匹配

SQL:检查一个表中是否存在另一个表中的条目,并删除重复项

Oracle 11g 从另一个具有重复项的表插入

在Oracle数据库中查找密钥存在的最快方法

/ * + * /在Oracle SQL中的用途是什么?

Oracle SQL 中的索引碎片是什么?

如何使用oracle在一个查询中删除多个表的记录

如何通过查询多个表来在oracle的一个字段中连接行

在Oracle中的一个查询中使用多个条件

Oracle 连接到多个列中的任何一个

Oracle SQL:使用另一个表中的数据更新表

Oracle SQL查询表并根据结果从另一个表中删除

如何在 Oracle 中查找多个列组合的重复项

我想编写一个 sql 查询来获取存在于 oracle 表的 clob 列中的soap xml 中的两个标签之间的数据

为什么在Oracle中需要一个普通帐户?