我有2张桌子。
表用户具有唯一的USERNAME
值。
表角色具有唯一的ROLENAME
值。
我需要编写一个脚本,将<2>加入 USER_TO_ROLE 表:
INSERT INTO USER_TO_ROLE
(user_id,
role_id)
VALUES
(SELECT id FROM Users WHERE username=@username LIMIT 1,
SELECT id FROM Roles WHERE rolename=@rolename LIMIT 1);
MySQL Workbench提供错误代码1064:
错误代码:1064。您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以获得正确的语法,使用“用户名= @用户名LIMIT 1的用户选择ID”,第3行选择“record_id”
有没有办法写这个,这样我就不必进行2次单独的数据库调用,在插入之前写下id值?
分辨
使用zerkms的例子,我写了这个SQL:
INSERT INTO USER_TO_ROLE
(user_id,
role_id)
SELECT u.id, r.id
FROM Users u JOIN Roles r
WHERE u.username=@username and r.rolename=@rolename;
我必须将 VALUES 用于 INSERT 语句才能正常工作。
答案 0 :(得分:1)
SELECT
查询中不能包含2个INSERT INTO ... SELECT
子句。
您可以将查询重写为
INSERT INTO USER_TO_ROLE
(user_id,
role_id)
SELECT
(SELECT id FROM Users WHERE username=@username LIMIT 1),
(SELECT id FROM Roles WHERE rolename=@rolename LIMIT 1)
这样你就会有一个SELECT
相应的2个嵌套查询。