给出带有列的表
| user_id | owner_id | something |
我需要删除所有记录,其中 user_id OR owner_id 存在于另一个表中
像:
delete from permission
where
user-id in (select user_id from users where a = 2)
or
owner_id in (select user_id from users where a = 2)
如果不两次调用相同的查询,我应该怎么做?
答案 0 :(得分:1)
尝试使用USING
子句:
DELETE FROM permissions
USING users
WHERE users.user_id IN (permissions.user_id, permissions.owner_id)
/*
or:
WHERE (permissions.user_id = users.user_id OR permissions.owner_id = users.user_id)
*/
AND users.a = 2
;
参考:
注意:此语法不是标准的,正如手册中正确指定的那样。
答案 1 :(得分:0)
您可以使用join来查找符合条件的权限中的行:
delete from permissions
where (user_id, owner_id) in
(select p.user_id, p.owner_id
from permissions p
join users on (u.user_id = p.user_id or u.user_id = p.owner_id))
如果您在user_id和owner_id上有索引,那么它将归结为几个连接的索引扫描。