我的MySQL数据库中有以下表格:
CREATE TABLE user_role (
user_role_id INT UNSIGNED AUTO_INCREMENT,
user_role VARCHAR(15) NOT NULL,
CONSTRAINT pk_user_role PRIMARY KEY (user_role_id)
);
CREATE TABLE users (
user_id INT UNSIGNED AUTO_INCREMENT,
user_role_id INT UNSIGNED NOT NULL,
email VARCHAR(254) NOT NULL,
password VARCHAR(255) NOT NULL,
CONSTRAINT pk_users PRIMARY KEY (user_id),
CONSTRAINT fk1_users FOREIGN KEY (user_role_id) REFERENCES user_role (user_role_id),
CONSTRAINT unq1_users UNIQUE (email)
);
假设所有用户角色都已存在,如何在一个语句中插入具有正确用户角色ID(即SELECT user_role_id WHERE user_role = 'role';
)的新用户?
我在以下问题中尝试过这个问题,但这对我没有用处:INSERT INTO with SubQuery MySQL
答案 0 :(得分:3)
假设所有用户角色已经存在,您可以使用此查询在一个语句中插入具有正确用户角色ID的新用户(即SELECT user_role_id WHERE user_role ='role';):
insert into users (user_role_id, email, password)
select
user_role_id,
'new_user',
'password_hash'
from user_role r
where r.user_role='role'
limit 1;
答案 1 :(得分:0)
如果子查询在值列表中工作,您可以尝试下面的第一个选项,但我怀疑他们没有。我也假设冒号是连接的参数标记,因为。
insert into users (user_id, user_role_id, email, password)
values (
:user_id,
(select user_role_id from user_role where user_role = 'role'),
:email,
:password
)
另一种选择:
insert into users (user_id, user_role_id, email, password)
select
:user_id,
(select user_role_id from user_role where user_role = 'role'),
:email,
:password
--from dual or some other dummy table??
尽管我不知道为什么limit 1
应该是必要的,但是ASh的回答可能很有效。在这种情况下,你有两个同名的角色,你不知道哪一个回来了。