我有一个 user_role
表,其中 user_id
被称为 user
表中的 foreign_key。
desc user;
+-----------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(256) | YES | | NULL | |
| e_key | varchar(256) | NO | UNI | NULL | |
+-----------------+--------------+------+-----+---------+----------------+
desc user_role;
+-----------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(256) | YES | | NULL | |
| user_id | int(11) | NO | | UNIQ | |
+-----------------+--------------+------+-----+---------+----------------+
我想创建一个测试数据,仅当 user_id 存在时才将值插入到 user_role
表中。用户可以通过唯一键“e_key”来识别。我正在搜索这样的查询
SET @user_id = (select u.id from user u where u.e_key = 'dave');
IF(@user_id IS NOT NULL) THEN
BEGIN
INSERT INTO user_role(`name`, user_id) VALUES ('admin', @user_id) ON DUPLICATE KEY UPDATE `name` = 'admin';
END;
END IF;
但是sql抛出错误。有什么办法可以实现这种行为吗?
最佳答案
您可以更改 INSERT 以使用 SELECT 作为要插入的字段的源,同时 SELECT 检查用户表。
像这样:-
INSERT INTO user_role(`name`, user_id)
SELECT 'admin', id
FROM user
WHERE id = @user_id
ON DUPLICATE KEY UPDATE `name` = 'admin';
关于mysql - 如何编写mysql查询以仅在foreign_key存在时插入值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24886566/