2017-06-08 17 views
0

カラムの部分に重複した値を持つテーブルがあり、これがテーブルの主キーです。私はそれらの重複を見つけるためにクエリを書こうとしましたが、それを理解できませんでした。 例:SQLはテーブル内の部分的な重複を見つけます

Taxi(Number, id) - Number is primary key on the table 
Values(123, 253) 
Values(123-, 253) 
Values(1 23,253) 

これらの全ては、必要に応じて重複として扱われます。 これは私がこれは私のすべての値をバック与えている運

select * from taxi t where exists(
select 1 from taxi t2 
where t1.id = t2.id 
and t2.number like t1.number||'%') 

と試みたクエリです。すべてのヘルプは、おそらくtranslate()はあなたがやりたいだろう

+0

データALLはどのように見えるのですか?その3つの値だけであれば、それを扱う式を簡単に書くことができます。しかし、あなたはそれらの100の異なる摂動を持っている場合...我々は、意図された主キーのこれらの複製を作成したパターンが何であるか知る必要があります。 – SandPiper

答えて

1

を高く評価されています。最初の文字列で0

select translate(number, '0- ', '0') as fixed_number 

すべての文字が削除されます。

だから、あなたが重複する場合は:あなたがデータを台無しにしている

select t.* 
from (select translate(number, '0- , '0') as fixed_number, t.*, 
      count(*) over (partition by translate(number, '0- ', '0')) as cnt 
     from t 
    ) t 
where cnt > 1 
order by fixed_number; 
+0

ありがとうございます。私は欠けている '0'を翻訳するために小さな微調整を行いました。これは完全に機能しました。 –

0

を。ブランクと ' - ' [と他の文字]を削除する正規表現を使用して選択し、グループ化してみてください。 count(*)> 1のセットはすべて重複しています。

関連する問題