SQL查询:筛选出包含在其他结果中的结果
我使用的是SQLite,我有一个名称为的表:SQL查询:筛选出包含在其他结果中的结果,sql,sqlite,Sql,Sqlite,我使用的是SQLite,我有一个名称为的表: [Data] "John" "John" "John" "John.wane" 当我询问: SELECT * from [TABLE] Group By Data 我得到: John John.wane 如何创建包含在其他列中的文件管理器列? 在这个例子中,John包含在John.Wane中 因此,John.Wane不应出现在查询结果中。您正在查找其他名称中未包含的名称。这有点难。好吧,约翰在《约翰·韦恩》中,但它也在《博比·约翰·韦恩》中,还
[Data]
"John"
"John"
"John"
"John.wane"
当我询问:
SELECT * from [TABLE] Group By Data
我得到:
John
John.wane
如何创建包含在其他列中的文件管理器列?
在这个例子中,John包含在John.Wane中
因此,John.Wane不应出现在查询结果中。您正在查找其他名称中未包含的名称。这有点难。好吧,约翰在《约翰·韦恩》中,但它也在《博比·约翰·韦恩》中,还是在《约翰·韦恩》中 这是一个只获取不存在包含该名称的其他名称条目的名称的查询。根据您的意愿调整仪表的表情
select data
from mytable
where not exists
(
select *
from mytable other
where other.data <> mytable.data
and instr(other.data, mytable.data) > 0
);
您可以使用以下内容:
SELECT CASE WHEN t2.Data IS NOT NULL THEN t2.Data ELSE t1.Data END
FROM Table1 AS t1
LEFT JOIN Table1 AS t2
ON t1.id <> t2.id AND t1.Data <> t2.Data AND t1.Data LIKE '%' || t2.Data || '%'
GROUP BY CASE WHEN t2.Data IS NOT NULL THEN t2.Data ELSE t1.Data END
此代码适用于我tmp是示例的临时表: 只是一个旁注:当您不聚合任何内容时,不要使用GROUP BY,即使用MIN、MAX、COUNT等。。您的查询应该是从[表]中选择不同的数据。
select 'John' as Data
into #tmp
union
select 'John' as Data
union
select 'John' as Data
union
select 'John' as Data
union
select 'John.Wane' as Data
select t1.Data
from #tmp t1
where t1.Data not in
(
select t3.Data
from #tmp t2
cross join #tmp t3
where t2.Data != t3.Data
and t3.Data not like REPLACE(t3.Data, t2.Data, '') + '%'
)
group by t1.Data
drop table #tmp