代码之家  ›  专栏  ›  技术社区  ›  jjuser19jj

如果子选择中不存在字符串,则从postgres数组中删除元素

  •  0
  • jjuser19jj  · 技术社区  · 6 年前

    ltree paths 在里面 postgres ,现在我需要删除一个标签,如果它不存在于 subquery .

    SELECT 
      string_to_array(stacks.path::text, '.') as path 
    FROM 
      stacks 
    WHERE 
      stacks.id IN (SELECT 
                      subscriptions.stack_id 
                    FROM 
                      subscriptions
                    WHERE 
                      subscriptions.owner_id = 'user')
    

    这条路是由堆栈id外汇'f34f.23fas.2fs2'。现在,我要删除路径中未包含的每个标签订阅.u id.Fx假设用户已订阅了堆栈23fas和2fs2。由于“23fas”是“f34f”的子级,因此其路径将返回“f34f.23fas”。但我想从23fas的路径中删除f34f。意思是我要删除所有不包含在订阅.u id.

    这就是我所做的,我不知道如何删除一个元素,如果它没有出现在一个给定的 子查询 .

    1 回复  |  直到 6 年前
        1
  •  0
  •   Barbaros Özhan    6 年前

    EXISTS 关键字:

    SELECT string_to_array(st.path::text, '.') as path 
      FROM stacks st 
     WHERE EXISTS (
        SELECT 1 
          FROM subscriptions sb
         WHERE sb.owner_id = 'user'
           AND sb.stack_id = st.id
      );