sql >> Database >  >> RDS >> Mysql

Invoegen met LEFT JOIN en INNER JOIN

U moet specifiek zijn over de kolommen die u selecteert. Als uw user tabel had vier kolommen id, name, username, opted_in u moet precies die vier kolommen uit de query selecteren. De syntaxis ziet er als volgt uit:

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

Er lijkt echter geen reden te zijn om lid te worden tegen user_permission hier, aangezien geen van de kolommen uit die tabel zou worden ingevoegd in user . In feite is deze INSERT lijkt onvermijdelijk te mislukken met schendingen van de uniciteit van de primaire sleutel.

MySQL ondersteunt geen invoegingen in meerdere tabellen tegelijk. U moet ofwel twee INSERT instructies in uw code, met behulp van de laatste invoeg-ID van de eerste query, of maak een AFTER INSERT trigger op de primaire tafel.

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)

Of gebruik een 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


  1. MariaDB LTRIM() vs LTRIM_ORACLE():wat is het verschil?

  2. Zoek of getal is opgenomen in een uitdrukking zoals:1-3,5,10-15,20

  3. PostgreSQL-lijstweergaven

  4. MySQL-tabellen overschrijven met AWS Glue