使用唯一ID作为输入

时间:2014-07-28 20:39:38

标签: mysql sql

我有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 语句才能正常工作。

1 个答案:

答案 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个嵌套查询。