mysql 如何添加引用另一个表的多行?

a9wyjsp7  于 2022-12-03  发布在  Mysql
关注(0)|答案(3)|浏览(172)

假设我有两个表,如下所示:

用户表:

| 用户标识|姓名|
| - -|- -|
| 第0页|凯文|
| 一个|爱丽丝|
| 2个|杰克|
| 三个|话筒|

权限表:

| 用户标识|权限|
| - -|- -|
| 一个|十二|
| 一个|五个|
| 三个|一个|
假设我想为每个还没有权限的用户添加权限5,那么最好的MySQL查询是什么?

hfyxw5xn

hfyxw5xn1#

您的问题不是100%清楚您是只需要一个查询还是要执行插入操作。无论如何,这个带有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

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

11dmarpk

11dmarpk2#

您的意思是将权限5添加到权限表中该用户的每个用户!

5lwkijsr

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个|五个|

相关问题