Sie müssen genau angeben, welche Spalten Sie auswählen. Wenn Ihr user
Tabelle hatte vier Spalten id, name, username, opted_in
Sie müssen genau diese vier Spalten aus der Abfrage auswählen. Die Syntax sieht folgendermaßen aus:
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
Es scheint jedoch keinen Grund zu geben, gegen user_permission
beizutreten hier, da keine der Spalten aus dieser Tabelle in user
eingefügt würden . Tatsächlich ist dieses INSERT
scheint bei Verletzungen der Eindeutigkeit des Primärschlüssels fehlzuschlagen.
MySQL unterstützt keine Einfügungen in mehrere Tabellen gleichzeitig. Sie müssen entweder zwei INSERT
ausführen Anweisungen in Ihrem Code, indem Sie die letzte Einfüge-ID aus der ersten Abfrage verwenden, oder erstellen Sie ein AFTER INSERT
Trigger auf der primären Tabelle.
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)
Oder mit einem 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