生产系统中有一个模块是管理用户及菜单权限,它们是由3个数据表组成,关系及字段如下:
原来为每个用户添加菜单的访问权限时都是一个一个添加,但今天遇到有个新来的员工,需要具有与另一个员工相同的权限。新建一个用户后,如果还按之前的方式添加菜单的访问权限,将是很麻烦的事,于是需要设计一个权限复制的功能。
该功能在软件中设计成下面的样式:
当点击“确定”按钮时,希望能将某个用户已有的所有权限。
首先想到的步骤如下:
1、从用户表中按姓名找出要复制和被赋予权限的id;
2、从权限表中按要复制的用户的菜单id;
3、将被赋予用户的id和菜单id批量写入到权限表;
但按这样来操作的话,最少都要3步,需要看看还有没有更优的方法,比如用一句SQL语句就实现。于是通过AI东拼西凑出了下面的SQL 语句:
/*使用INSERT INTO SELECT语句来将SELECT出的数据再INSERT到表中*/
INSERT INTO 权限表(用户id,菜单id,禁用)
SELECT () AS 用户id,菜单id,'FALSE' AS 禁用
FROM 权限表
WHERE 用户id=()
/*前一个()是要插入的新的用户id,那就是要被赋予权限的账号的id*/
SELECT id FROM 用户表 WHERE 姓名='要被账予的用户姓名'
/*后一个()是要复制的用户的id*/
SELECT id FROM 用户表 WHERE 姓名='要复制的用户名'
/*将3条SQL语句进行合并为1条*/
INSERT INTO 权限表(用户id,菜单id,禁用)
SELECT (SELECT id FROM 用户表 WHERE 姓名='要被账予的用户姓名') AS 用户id,菜单id,'FALSE' AS 禁用
FROM 权限表
WHERE 用户id=(SELECT id FROM 用户表 WHERE 姓名='要复制的用户名')
这样在客户端只要将两个用户名传递并拼接到SQL语句中,通过一次执行就可以完成任务了。
以上的SQL是通过文心一言弄出来的,我问的是:
用sql实现:一个数据表中有userid、menuid,根据userid=2筛选出menuid,然后将userid=3和前面筛选出的menuid再插入到本数据表中
然后我自己再修改了查询对应用户的id的语句。
希望上面的分享能为大家带来帮助,也希望大家能利用好AI更好的学习与作。