選択する列について具体的にする必要があります。 user
の場合 テーブルには4つの列id, name, username, opted_in
がありました クエリからこれらの4つの列を正確に選択する必要があります。構文は次のようになります:
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は、同時に複数のテーブルへの挿入をサポートしていません。 2つの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)
または、トリガー を使用します :
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