我有一张表格如下
表T
V
__
a
ab
abc
abcd
x
xy
xyz
xyzw
我必须得到输出
abcd
xyzw
我写了如下查询 http://sqlfiddle.com/#!4/13c56/10
with x as
(select t1.v v1, t2.v v2
from t t1, t t2
where t1.v not like t2.v||'%')
select distinct v1
from x x1
where not exists
(select 1
from x x2
where x2.v2 like x1.v1 ||'%'
and x2.v2 <> x1.v1)
有没有更好的方法来编写此查询?请分享查询。
答案 0 :(得分:0)
使用外部联接查找更长类似的序列,然后过滤掉匹配,只留下最长的序列:
select v from
(select t1.v, t2.v v2
from t t1
left join t t2 on t2.v like t1.v || '_%') x
where v2 is null
请参阅SQL Fiddle。
请注意在_
中使用like
(仅指一个字符)在匹配行中至少需要1个字符。
鉴于您的无欺骗示例数据和此逻辑,不需要distinct
。但是,如果您有重复的最长序列并且想要重复删除,请添加distinct
。