SQL查询:筛选出包含在其他结果中的结果

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不应出现在查询结果中。您正在查找其他名称中未包含的名称。这有点难。好吧,约翰在《约翰·韦恩》中,但它也在《博比·约翰·韦恩》中,还

我使用的是SQLite,我有一个名称为的表:

[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