Vous devez être précis sur les colonnes que vous sélectionnez. Si votre user
la table avait quatre colonnes id, name, username, opted_in
vous devez sélectionner exactement ces quatre colonnes dans la requête. La syntaxe ressemble à :
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
Cependant, il ne semble pas y avoir de raison de rejoindre contre user_permission
ici, car aucune des colonnes de cette table ne serait insérée dans user
. En fait, ce INSERT
semble voué à l'échec avec des violations d'unicité de clé primaire.
MySQL ne prend pas en charge les insertions dans plusieurs tables en même temps. Vous devez soit effectuer deux INSERT
instructions dans votre code, en utilisant le dernier identifiant d'insertion de la première requête, ou créez un AFTER INSERT
trigger sur la table primaire.
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)
Ou en utilisant un déclencheur :
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