このような:
select distinct
id, name
from
(select distinct
x.id,
x.NAME,
length(x.NAME) as leng,
substr(x.name, level, 1) as namechar
from
YourTable x
start with
level = 0
connect by
level <= length(x.name)) y
where
exists
(select
'x'
from
YourTable z
where
instr(z.name, y.namechar) > 0 and
z.id <> y.id)
order by
id
機能:
まず、(内部選択) 名前の各文字の数値を返す数値ジェネレーターでテーブルを使用します。これで、各レコードYourTable
が返されLength(Name)
、それぞれ別の数値が返されます。その生成された番号は、その文字 (substr) を分離するために使用されます。
次に (最上位の where 句でサブ選択)、その孤立した文字を含むレコードが存在するかどうかを確認します。複数の文字が一致する場合、レコードが複数回返されるため、Distinct が必要です。namechar
外側の選択フィールド リストに追加して、一致する文字を表示できます。