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

时间:2018-12-04 20:55:33

标签: sql arrays postgresql subquery

您好,我在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')

路径由stacks.id fx'f34f.23fas.2fs2'组成。现在,我要删除subscriptions.stack_id中未包含的路径的每个标签。 Fx可以说用户已预订了堆栈23fas和2fs2。由于“ 23fas”是“ f34f”的子代,因此其路径将返回“ f34f.23fas”。但我想从“ 23fas”的路径中删除“ f34f”。这意味着我想删除subscriptions.stack_id中未包含的所有标签。

这就是我能走多远,如果某个给定的subquery中没有出现某个元素,我想不出如何删除它。

1 个答案:

答案 0 :(得分:0)

我认为您需要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
  );