每次用户搜索的东西都会被记录到表中。
子搜索也会被记录下来。它们是用星号记录的。
每次搜索我都会尝试拉最长的字符串。
用户可以执行多个搜索。
例如,这里User1搜索“数据管理”和“状态信息”。我想忽略记录的部分搜索(子搜索),如“数据管理*”、“数据管理*”、“状态输入*”,并拉取已完成的完整搜索。
桌子

                id user   data
                ---------------
                1  user1  data manag*
                2  user1  confer*
                3  user1  incomplete sear*
                4  user1  data managem*
                5  user1  conference c*
                6  user1  data management
                7  user1  conference call*
                8 user1  status in*
                9 user1  status information

输出应该是
            user1 data management
            user1 conference call*
            user1 incomplete sear*
            user1 status information

你能帮忙吗?

最佳答案

这样做很好:

with
  searches (id, "user", data) as ( values
    (1, 'user1', 'data manag*'),
    (2, 'user1', 'confer*'),
    (3, 'user1', 'incomplete sear*'),
    (4, 'user1', 'data managem*'),
    (5, 'user1', 'conference c*'),
    (6, 'user1', 'data management'),
    (7, 'user1', 'conference call*'),
    (8, 'user1', 'status in*'),
    (9, 'user1', 'status information')
    )
select "user", data
from searches s
where data not like '%*'
   or not exists (
            select 1
            from searches
            where "user" = s."user"
              and id <> s.id
              and data like (left(s.data, -1)||'%')
          )

09-27 18:27