假设我有两个表,如下所示:
用户表:
| 用户标识|姓名|| - -|- -|| 第0页|凯文|| 一个|爱丽丝|| 2个|杰克|| 三个|话筒|
权限表:
| 用户标识|权限|| - -|- -|| 一个|十二|| 一个|五个|| 三个|一个|假设我想为每个还没有权限的用户添加权限5,那么最好的MySQL查询是什么?
hfyxw5xn1#
您的问题不是100%清楚您是只需要一个查询还是要执行插入操作。无论如何,这个带有NOT EXISTS的查询可以用作所有必要操作的基础:
NOT EXISTS
SELECT user_id, 5 AS permission FROM users u WHERE NOT EXISTS (SELECT 1 FROM permissions WHERE permission = 5 AND user_id = u.user_id);
这将列出所有还没有权限5的用户ID,并且作为第二列,仅选择5作为权限。然后这个结果可以被用于任何它应该被使用的地方。例如,要在一个查询中将这个结果添加到已经存在的条目中,可以使用UNION ALL:
UNION ALL
SELECT user_id, 5 AS permission FROM users u WHERE NOT EXISTS (SELECT 1 FROM permissions WHERE permission = 5 AND user_id = u.user_id) UNION ALL SELECT user_id, permission FROM permissions ORDER BY user_id, permission;
如果-我想这是您真实的的问题-NOT EXISTS查询的结果应该插入到权限表中,此插入命令将执行以下操作:
INSERT INTO permissions (SELECT user_id, 5 FROM users u WHERE NOT EXISTS (SELECT 1 FROM permissions WHERE permission = 5 AND user_id = u.user_id));
您可以在此处尝试以下操作:db<>fiddle
11dmarpk2#
您的意思是将权限5添加到权限表中该用户的每个用户!
5lwkijsr3#
下面的查询将查找权限中缺少的用户ID,并在权限表中插入默认权限等于5的新记录。
INSERT INTO permissions ( user_id, permission ) SELECT user_id, 5 AS permission FROM users WHERE user_id NOT IN ( SELECT user_id FROM permissions) )
样本结果:| 用户标识|权限|| - -|- -|| 一个|十二|| 一个|五个|| 三个|一个|| 第0页|五个|| 2个|五个|
3条答案
按热度按时间hfyxw5xn1#
您的问题不是100%清楚您是只需要一个查询还是要执行插入操作。无论如何,这个带有
NOT EXISTS
的查询可以用作所有必要操作的基础:这将列出所有还没有权限5的用户ID,并且作为第二列,仅选择5作为权限。
然后这个结果可以被用于任何它应该被使用的地方。例如,要在一个查询中将这个结果添加到已经存在的条目中,可以使用
UNION ALL
:如果-我想这是您真实的的问题-
NOT EXISTS
查询的结果应该插入到权限表中,此插入命令将执行以下操作:您可以在此处尝试以下操作:db<>fiddle
11dmarpk2#
您的意思是将权限5添加到权限表中该用户的每个用户!
5lwkijsr3#
下面的查询将查找权限中缺少的用户ID,并在权限表中插入默认权限等于5的新记录。
样本结果:
| 用户标识|权限|
| - -|- -|
| 一个|十二|
| 一个|五个|
| 三个|一个|
| 第0页|五个|
| 2个|五个|