首页 > 解决方案 > 过滤postgresql查询,其中值不是同一列中任何其他值的子字符串

问题描述

我有一个表,其中有一列名为values

values | other_columns...
-------+-----------------
     f |              ...
   foo |              ...
    fo |              ...
   bar |              ...
    ba |              ...
   baz |              ...
foobar |              ...

查询此表时,我想过滤结果,以便仅剩下的行value不是列中任何其他行的子字符串value

prime_values | other_result_columns...
-------------+------------------------
         baz |                     ...
      foobar |                     ...

我怎样才能做到这一点?

标签: postgresql

解决方案


不存在:

select t.* 
from tablename t
where not exists (
  select 1
  from tablename
  where 
    values <> t.values 
    and 
    values like concat('%', t.values, '%')
)

请参阅演示
结果:

> | values |...
> | :----- |
> | baz    |
> | foobar |

推荐阅读