对于我的表users
和assigned_roles
,我想设置users.confirmed = 0
,users
属于assigned_roles
的地方除外。
assigned_roles表
ID | USER_ID | ROLES
SQL
UPDATE users, assigned_roles
SET users.confirmed=0
WHERE users.id != assigned_roles.user_id
我知道我的最后一行是错的。执行查询以使其在除分配角色的用户之外的所有用户上运行的正确方法是什么?
答案 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 JOIN
和NOT EXISTS
更适合此查询,因为它们处理NULL
的{{1}}值的方式。