根据检查两个列表中的 ID 的 WHERE 条件从多对多关系 table 中批量删除

bulk delete from a many-to-many relation table based on a WHERE condition that checks ids in two lists

假设有一个员工table和一个项目table。 关系 table emp_proj 包含以下列:(id, emp_id, proj_id)

我想从 emp_proj 中删除包含以下对 (emp_id, proj_id) 的行:(1,101) , (1,102), (2,202), (3,303)

请注意,table 可能包含具有 emp_ids 1、2 和 3 的其他行。

我将如何使用 WHERE 子句来比较这些对?

我考虑过使用 OR 的嵌套,但这会使查询复杂化。

我还想进行一次批量删除操作,一次性删除包含相关对的所有行。

在 Postgres 上,您建议的方法可能是唯一的选择:

DELETE
FROM emp_proj
WHERE
    emp_id = 1 AND proj_id = 101 OR
    emp_id = 1 AND proj_id = 102 OR
    emp_id = 2 AND proj_id = 202 OR
    emp_id = 3 AND proj_id = 303;

请注意,在某些其他数据库上,例如 MySQL,您可以使用更简洁的元组语法:

DELETE
FROM emp_proj
WHERE
    (emp_id, proj_id) IN ((1, 101), (1, 102), (2, 202), (3, 303));