2017-05-01 8 views
1

テーブルの場合とassigned_rolesassigned_rolesに属する場合を除き、users.confirmed = 0を設定したいとします。SQLは特定のテーブルに属するものを除いてすべてのレコードを更新する

assigned_rolesテーブル
ID | USER_ID | ROLES

SQL

UPDATE users, assigned_roles 
SET users.confirmed=0 
WHERE users.id != assigned_roles.user_id 

私は私の最後の行が間違っている知っています。割り当てられた役割を持つユーザー以外のすべてのユーザーに対して実行されるようにクエリを実行する正しい方法は何ですか?

答えて

3

あなたは近くです。そのWHERE句でサブクエリが必要です。

UPDATE users 
SET confirmed=0 
WHERE id NOT IN (SELECT user_id FROM assigned_roles); 
1

また、結合でこれを行うこともできます。 。 。しかし、左の参加:

UPDATE users u LEFT JOIN 
     assigned_roles ar 
     ON u.id = ar.user_id 
    SET u.confirmed = 0 
    WHERE ar.user_id IS NULL; 

LEFT JOINNOT EXISTSがあるため、彼らはassigned_roles.user_idNULL値を処理する方法のため、このクエリのために優れています。

関連する問題