根据检查两个列表中的 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));
假设有一个员工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));