Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Oracle重复行检测_Sql_Oracle - Fatal编程技术网

Sql Oracle重复行检测

Sql Oracle重复行检测,sql,oracle,Sql,Oracle,在Oracle中显示重复行的理想方式是什么?这里的技巧是,我要查找所有行,而不仅仅是倍数(重复)。例如,在以下数据集上: RSN fname lname emailaddress 1 John Smith j.smith@system.com 2 John Smith j.smith@system.com 3 John Smith j.smith@system.com 4 Kevin Walker k.walker@system.com

在Oracle中显示重复行的理想方式是什么?这里的技巧是,我要查找所有行,而不仅仅是倍数(重复)。例如,在以下数据集上:

RSN fname   lname   emailaddress
1   John    Smith   j.smith@system.com
2   John    Smith   j.smith@system.com
3   John    Smith   j.smith@system.com
4   Kevin   Walker  k.walker@system.com
5   James   Kirk    j.kirk@system.com
6   James   Kirk    j.kirk@system.com
7   Kevin   James   k.james@system.com
8   Mike    Jones   m.jones@system.com
我希望返回以下内容:

1   John    Smith   j.smith@system.com
2   John    Smith   j.smith@system.com
3   John    Smith   j.smith@system.com
5   James   Kirk    j.kirk@system.com
6   James   Kirk    j.kirk@system.com
有什么帮助吗?

这里有一种方法:

SELECT RSN, fname, lname, emailaddress
  FROM whatever_your_table_is_named t1
 WHERE ( SELECT COUNT(1)
           FROM whatever_your_table_is_named t2
          WHERE t2.fname = t1.fname
            AND t2.lname = t1.lname
            AND t2.emailaddress = t1.emailaddress
            AND ROWNUM < 3
       ) > 1
;
(免责声明:我没有测试任何一个。)

这里有一种方法:

SELECT RSN, fname, lname, emailaddress
  FROM whatever_your_table_is_named t1
 WHERE ( SELECT COUNT(1)
           FROM whatever_your_table_is_named t2
          WHERE t2.fname = t1.fname
            AND t2.lname = t1.lname
            AND t2.emailaddress = t1.emailaddress
            AND ROWNUM < 3
       ) > 1
;

(免责声明:我没有测试任何一个。)

此子查询将从表中获取重复项

    select *
    from (some table)
    where rsn IN (select rsn
                  from (some table) 
                   where fname IN 
                   (select fname
                    from (select fname, count(fname) as dup 
           from (some table)) where dup > 1)

此子查询将从表中获取重复项

    select *
    from (some table)
    where rsn IN (select rsn
                  from (some table) 
                   where fname IN 
                   (select fname
                    from (select fname, count(fname) as dup 
           from (some table)) where dup > 1)

在这里,让我为您介绍一下,我进行了广泛的搜索,但是,我找到的结果只返回了重复项,即作为给定条件的第二个或更高实例的行。但是,感谢您的输入。在这里,让我为您介绍一下。我进行了广泛的搜索,但是,我找到的结果只返回了重复项,即给定条件的第二个或更高实例的行。但是谢谢你的投入。谢谢,我不知道它有多完美,因为我的甲骨文技能显然不太好,但它确实有效。谢谢你,鲁克!那个数字(1)很难看。这是非标准的,不比count(*)好多少。关于它在性能方面的优越性的传闻只是神话。任何改进都是非常受欢迎的。我将对超过一百万条记录运行此操作。@Davidadridge:我知道
COUNT(1)
COUNT(*)
没有性能优势,也没有缺点,它们只是等价的,但我经常使用
COUNT
来计算非空值,所以我发现
COUNT(1)
(意思是“计算
1
非空的记录”)比
count(*)
(意思是“OMG神奇的语法,它需要额外的击键,看起来应该与
*
的其他用途有关,即使它不是”)。当你说它“丑陋”和“非标准”时,你是什么意思?count(*)根据ANSI SQL标准(和文档)表示“统计记录”,因此根据定义,任何其他内容——计数(1)、计数(0)、计数('X')都是非标准的。正如我所说,有一个神话认为计数(1)比计数(*)快因此,每当相信神话的人看到它时,就会强化他们的错误信念。当一个从未听说过神话的人看到它时,就会导致“调查”“这使他们变成了一种错误的信仰。我认为应该劝阻它,因为它有这些缺点,但没有优点。谢谢,我不知道它有多最优,因为我的Oracle技能显然不是很好,但它确实有效。谢谢你,鲁克!那个数字(1)很难看。这是非标准的,不比count(*)好多少。关于它在性能方面的优越性的传闻只是神话。任何改进都是非常受欢迎的。我将对超过一百万条记录运行此操作。@Davidadridge:我知道
COUNT(1)
COUNT(*)
没有性能优势,也没有缺点,它们只是等价的,但我经常使用
COUNT
来计算非空值,所以我发现
COUNT(1)
(意思是“计算
1
非空的记录”)比
count(*)
(意思是“OMG神奇的语法,它需要额外的击键,看起来应该与
*
的其他用途有关,即使它不是”)。当你说它“丑陋”和“非标准”时,你是什么意思?count(*)根据ANSI SQL标准(和文档)表示“统计记录”,因此根据定义,任何其他内容——计数(1)、计数(0)、计数('X')都是非标准的。正如我所说,有一个神话认为计数(1)比计数(*)快因此,每当一个相信神话的人看到它时,它就会强化他们的错误信念。当一个从未听说过神话的人看到它时,它可能会导致一个“调查”,使他们转变为错误信念。我认为应该劝阻它,因为它有这些缺点而没有好处。