Удалить элемент из массива postgres, если строка не существует в sub select - PullRequest
0 голосов
/ 04 декабря 2018

Здравствуйте, у меня есть пара 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'.Теперь я хочу удалить каждую метку пути, не содержащегося в subscription.stack_id.Fx позволяет сказать, что пользователь подписался на стеки 23fas и 2fs2.Так как '23fas' является потомком 'f34f', путь будет возвращать 'f34f.23fas'.Но я хочу удалить 'f34f' с пути '23fas'.Это означает, что я хочу удалить все метки, не содержащиеся в subscription.stack_id.

Это то, как далеко я продвинулся, я не могу понять, как удалить элемент, если он не появляется в данном subquery.

1 Ответ

0 голосов
/ 05 декабря 2018

Я думаю, вам нужно 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
  );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...