Devi essere specifico sulle colonne che stai selezionando. Se il tuo user
la tabella aveva quattro colonne id, name, username, opted_in
è necessario selezionare esattamente queste quattro colonne dalla query. La sintassi è simile a:
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
Tuttavia, non sembra esserci alcun motivo per partecipare contro user_permission
qui, poiché nessuna delle colonne di quella tabella verrebbe inserita in user
. In effetti, questo INSERT
sembra destinato a fallire con le violazioni dell'unicità della chiave primaria.
MySQL non supporta gli inserimenti in più tabelle contemporaneamente. Devi eseguire due INSERT
istruzioni nel codice, utilizzando l'ultimo ID di inserimento dalla prima query o creare un AFTER INSERT
trigger sulla tabella principale.
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)
Oppure utilizzando un 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