2011-05-05 28 views
-2

我想有一个SQL查询来选择所有这些重复的行。例如,在名为OWNER_NAME的列中,有数千条记录。但我只选择那些被复制像SQL查询选择仅复制的所有数据行

阿贾伊
阿贾伊·辛格
阿贾伊·沙玛
博比·德尔
鲍比
维克拉姆·辛格
维克拉姆·夏尔马的名字。
意味着整个字母系列应该覆盖n的所有单名应删除

+1

在那里看不到任何重复...?上面哪一行应该删除? – 2011-05-05 10:32:38

+1

请输入以上输入中的预期输出 – Mayank 2011-05-05 10:36:47

+0

您是否想要选择同时显示为全名的一部分的单个名称,并删除这些名称? – StevieG 2011-05-05 10:48:48

回答

2

我会大致这样:

SELECT * FROM (
    SELECT owner_name, 
      COUNT(*) OVER (PARTITION BY CASE WHEN instr(owner_name, ' ') = 0 then owner_name 
              else substr(owner_name, 1, instr(owner_name, ' ') - 1) 
             END) cnt 
    FROM table 
) WHERE cnt > 1 

将根据第一个字(直到第一个空间如果有的话)使组。也许你想upper ize它也。

0

假设你想删除consisiting只有姓的所有行:

delete from my_tab where instr(name, ' ') = 0 

这将删除不包含所有行一个空格字符。

+0

我想他说他想选择他们。 – Atticus 2011-05-05 10:42:04

+0

@Jobz - 不,最后一个句子说“应该涵盖整个字母表系列n所有单个名字都应该删除” – APC 2011-05-05 11:58:51

-1

我会将它存储到一个数据集并循环重复。