Sql Oracle重复行检测
在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
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)比计数(*)快因此,每当一个相信神话的人看到它时,它就会强化他们的错误信念。当一个从未听说过神话的人看到它时,它可能会导致一个“调查”,使他们转变为错误信念。我认为应该劝阻它,因为它有这些缺点而没有好处。