我想检查重复的行,并查看其中的列值。如果我的表中只有几列(例如2列),我会执行如下操作:'''
select col1, col2 ,count(*)
from mytable
group by col1,col2
having count(*) > 1.
“”“但我的表中有许多列....使用上述语法指定表中的所有列非常繁琐。尝试使用select distinct的另一种方法...将无法为我标识重复行的内容。我尝试了类似”“”的方法
select * , count (*)
from my table
group by *
“”“可是那不行。
2条答案
按热度按时间8ehkhllq1#
编写一个将为您编写查询的查询。
例如,“john smith”在这里是重复的:
Query使用
user_tab_columns
并聚合所有列名,将它们连接到select
语句的其余部分:现在,复制/粘贴上面的
statement_to_run
并得到结果:nnsrf1az2#
把所有的栏都写出来。
有几十列,大约30列,名字看起来像:'AGtrf-456 F_R值'
复制粘贴。
在SQL*Plus中,您可以使用
DESCRIBE
命令来描述表,并且可以从表描述中复制列名。或者,您可以使用以下命令列出所有列:
然后将查询的输出复制粘贴到
SELECT
和GROUP BY
子句中。可以自动生成查询。
是的,但通常不值得这样做,因为编写查询以生成查询所需的时间比仅列出列和复制粘贴所需的时间要长。
如果有许多列名需要使用带引号的标识符(即,它们大小写混合或使用非标准字符,如
-
),则可以用途:除非列太多且
LISTAGG
超过4000个字符,否则您需要使用以下代码:fiddle