您好,我在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
中没有出现某个元素,我想不出如何删除它。
答案 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
);