Ste*_*hRT 40 mysql inner-join left-join
嘿所有我试图找出如何使用以下查询插入新记录:
SELECT user.id, user.name, user.username, user.email,
IF(user.opted_in = 0, 'NO', 'YES') AS optedIn
FROM
user
LEFT JOIN user_permission AS userPerm ON user.id = userPerm.user_id
ORDER BY user.id;
Run Code Online (Sandbox Code Playgroud)
INSERT到目前为止,我的查询是:
INSERT INTO user
SELECT *
FROM user
LEFT JOIN user_permission AS userPerm ON user.id = userPerm.user_id;
Run Code Online (Sandbox Code Playgroud)
但是,我不确定VALUE('','','','', etc etc)在使用左连接和内连接时该怎么做.
所以我要做的是:
User 表:
id | name | username | password | OptIn
--------------------------------------------------------------------
562 Bob Barker bBarker BBarker@priceisright.com 1
Run Code Online (Sandbox Code Playgroud)
还有user_permission桌子
user_id | Permission_id
-------------------------
562 4
Run Code Online (Sandbox Code Playgroud)
更新 这样吗?
INSERT INTO user (name, username, password, email, opted_in) VALUES ('Bbarker','Bbarker','blahblahblah','Bbarker@priceisright.com',0);
INSERT INTO user_permission (user_id, permission_id) VALUES (LAST_INSERT_ID(),4);
Run Code Online (Sandbox Code Playgroud)
Mic*_*ski 53
您必须具体说明您选择的列.如果您的user表有四列id, name, username, opted_in,则必须从查询中精确选择这四列.语法如下:
INSERT INTO user (id, name, username, opted_in)
SELECT id, name, username, opted_in
FROM user LEFT JOIN user_permission AS userPerm ON user.id = userPerm.user_id
Run Code Online (Sandbox Code Playgroud)
但是,似乎没有任何理由在user_permission此处加入,因为该表中的任何列都不会插入user.实际上,这INSERT似乎必然会因主键唯一性违规而失败.
MySQL不支持同时插入多个表.您需要INSERT在代码中执行两个语句,使用第一个查询中的最后一个插入ID,或者AFTER INSERT在主表上创建一个触发器.
INSERT INTO user (name, username, email, opted_in) VALUES ('a','b','c',0);
/* Gets the id of the new row and inserts into the other table */
INSERT INTO user_permission (user_id, permission_id) VALUES (LAST_INSERT_ID(), 4)
Run Code Online (Sandbox Code Playgroud)
或使用触发器:
CREATE TRIGGER creat_perms AFTER INSERT ON `user`
FOR EACH ROW
BEGIN
INSERT INTO user_permission (user_id, permission_id) VALUES (NEW.id, 4)
END
Run Code Online (Sandbox Code Playgroud)
Ome*_*esh 19
VALUES使用其他SELECT查询插入数据时,不能使用子句.请参阅INSERT SYNTAX
INSERT INTO user
(
id, name, username, email, opted_in
)
(
SELECT id, name, username, email, opted_in
FROM user
LEFT JOIN user_permission AS userPerm
ON user.id = userPerm.user_id
);
Run Code Online (Sandbox Code Playgroud)