Mysql
 sql >> Database >  >> RDS >> Mysql

Inserisci usando LEFT JOIN e INNER JOIN

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