使用产生两列的子查询删除(在 Postgresql 中)

Bor*_*jaX 4 sql postgresql subquery sql-delete

我必须删除一些与使用子查询计算的两列相匹配的记录。

我可以用这个查询正确地看到它们:

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;
Run Code Online (Sandbox Code Playgroud)

这有效,我看到了要删除的 7 个作业。

然而,删除并不像通过 DELETE 更改 SELECT 那样容易...

如果我做:

delete from user_assignments as ua, 
    (
        ...
    ) as sq
    where sq.uid = ua.user_id AND sq.jid = ua.job_selection_id;
Run Code Online (Sandbox Code Playgroud)

我得到:

ERROR:  syntax error at or near ","
Run Code Online (Sandbox Code Playgroud)

我已经尝试了很多种组合,但我无法让它发挥作用。我想这一定很简单,但我在 SQL 方面是个新手。

基本上,我有一个子查询,它可以正确生成两列,我可以将它们用于 a SELECT FROM user_assignments,现在我想要DELETE FROM user_assignments我知道可以选择的记录。

任何提示将不胜感激。先感谢您。

Gor*_*off 5

使用inexists

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
             );
Run Code Online (Sandbox Code Playgroud)