SQL更新除属于特定表的记录之外的所有记录

时间:2017-05-01 17:23:44

标签: mysql sql

对于我的表usersassigned_roles,我想设置users.confirmed = 0users属于assigned_roles的地方除外。

assigned_roles表
    ID | USER_ID | ROLES

SQL

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

我知道我的最后一行是错的。执行查询以使其在除分配角色的用户之外的所有用户上运行的正确方法是什么?

2 个答案:

答案 0 :(得分:3)

你很亲密。只需要在WHERE子句中使用子查询:

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

答案 1 :(得分: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更适合此查询,因为它们处理NULL的{​​{1}}值的方式。