gpt4 book ai didi

mysql - 使用 LEFT JOIN 和 INNER JOIN 插入

转载 作者:IT老高 更新时间:2023-10-28 12:59:06 31 4
gpt4 key购买 nike

大家好,我想知道如何使用以下查询插入新记录:

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;

到目前为止,我的 INSERT 查询是这样的:

INSERT INTO user 
SELECT *
FROM user
LEFT JOIN user_permission AS userPerm ON user.id = userPerm.user_id;

但是,当使用左连接和内连接时,我不确定如何执行 VALUE('','','','', etc etc)

所以我想做的是:

用户表:

id    | name       | username    | password                 | OptIn
--------------------------------------------------------------------
562 Bob Barker bBarker BBarker@priceisright.com 1

还有 user_permission

user_id   | Permission_id
-------------------------
562 4

更新就这样?

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);

最佳答案

您必须具体说明您选择的列。如果您的 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

但是,这里似乎没有任何理由反对 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)

或使用 trigger :

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

关于mysql - 使用 LEFT JOIN 和 INNER JOIN 插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12073513/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com