1

列のあるテーブルが与えられた

| user_id | owner_id | something |

user_idまたは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) 

同じクエリを2回呼び出さずに、どうすればよいですか?

4

2 に答える 2

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
;

参照:

注: マニュアルで正式に指定されているように、この構文は標準ではありません。

于 2012-12-28T16:16:57.833 に答える
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 にインデックスがある場合、2 つの結合されたインデックス スキャンに要約されます。

于 2012-12-27T16:44:17.063 に答える