Mysql
 sql >> Base de données >  >> RDS >> Mysql

Insérer en utilisant LEFT JOIN et INNER JOIN

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