使用产生两列的子查询删除(在 Postgresql 中)
Delete with subquery that produces two columns (in Postgresql)
我必须删除一些匹配子查询计算的两列的记录。
我可以通过这个查询正确地看到它们:
select * from user_assignments as ua,
(
select user_assignments.user_id as uid,
job_selection as jid
from user_assignments
join job_selections on job_id = jobs.id
join data on job_selections.data_id = data.id
where data.my_column IS NULL
) as sq
where sq.uid = ua.user_id AND ua.job_selection_id = sq.jid;
这有效,我看到了我要删除的 7 个作业。
然而,删除并不像通过 DELETE 更改 SELECT 那样简单...
如果我这样做:
delete from user_assignments as ua,
(
...
) as sq
where sq.uid = ua.user_id AND sq.jid = ua.job_selection_id;
我得到:
ERROR: syntax error at or near ","
我已经尝试了很多种组合,但我无法让它工作。我想它一定很简单,但我是 SQL 的新手。
基本上,我有一个子查询可以正确生成我可以用于 SELECT FROM user_assignments
的两列,现在我想 DELETE FROM user_assignments
我知道我可以 SELECT 的记录。
如有任何提示,我们将不胜感激。提前谢谢你。
使用in
或exists
:
delete from user_assignments ua
where exists (select 1
from user_assignments ua2 join
job_selections js
on ua2.job_id = js.id join
data d
on js.data_id = d.id
where d.my_column IS NULL and
ua.user_id = sq.uid and ua.job_selection_id = sq.jid
);
哦,我明白了(我想)。
感谢本教程 this tutorial,特别是 SQL 部分使用带别名的子查询删除记录。
如果其他人有兴趣,我所做的是:
DELETE FROM user_assignments ua
WHERE EXISTS(
SELECT user_assignments.user_id as uid,
user_assignments.job_selection as jid
FROM user_assignments
join job_selections on job_id = jobs.id
join data on job_selections.data_id = data.id
WHERE data.my_column IS NULL
AND ua.user_id = uid
AND ua.job_selection = jid
)
此查询也适用于 SELECT * FROM user_assignments
我必须删除一些匹配子查询计算的两列的记录。
我可以通过这个查询正确地看到它们:
select * from user_assignments as ua,
(
select user_assignments.user_id as uid,
job_selection as jid
from user_assignments
join job_selections on job_id = jobs.id
join data on job_selections.data_id = data.id
where data.my_column IS NULL
) as sq
where sq.uid = ua.user_id AND ua.job_selection_id = sq.jid;
这有效,我看到了我要删除的 7 个作业。
然而,删除并不像通过 DELETE 更改 SELECT 那样简单...
如果我这样做:
delete from user_assignments as ua,
(
...
) as sq
where sq.uid = ua.user_id AND sq.jid = ua.job_selection_id;
我得到:
ERROR: syntax error at or near ","
我已经尝试了很多种组合,但我无法让它工作。我想它一定很简单,但我是 SQL 的新手。
基本上,我有一个子查询可以正确生成我可以用于 SELECT FROM user_assignments
的两列,现在我想 DELETE FROM user_assignments
我知道我可以 SELECT 的记录。
如有任何提示,我们将不胜感激。提前谢谢你。
使用in
或exists
:
delete from user_assignments ua
where exists (select 1
from user_assignments ua2 join
job_selections js
on ua2.job_id = js.id join
data d
on js.data_id = d.id
where d.my_column IS NULL and
ua.user_id = sq.uid and ua.job_selection_id = sq.jid
);
哦,我明白了(我想)。
感谢本教程 this tutorial,特别是 SQL 部分使用带别名的子查询删除记录。
如果其他人有兴趣,我所做的是:
DELETE FROM user_assignments ua
WHERE EXISTS(
SELECT user_assignments.user_id as uid,
user_assignments.job_selection as jid
FROM user_assignments
join job_selections on job_id = jobs.id
join data on job_selections.data_id = data.id
WHERE data.my_column IS NULL
AND ua.user_id = uid
AND ua.job_selection = jid
)
此查询也适用于 SELECT * FROM user_assignments