Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Einfügen mit LEFT JOIN und INNER JOIN

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