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

Indsæt med LEFT JOIN og INNER JOIN

Du skal være specifik omkring de kolonner, du vælger. Hvis din user tabellen havde fire kolonner id, name, username, opted_in du skal vælge præcis disse fire kolonner fra forespørgslen. Syntaksen ser sådan ud:

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

Der ser dog ikke ud til at være nogen grund til at tilslutte sig user_permission her, da ingen af ​​kolonnerne fra den tabel ville blive indsat i user . Faktisk er denne INSERT ser ud til at mislykkes med overtrædelser af den primære nøgles unikke karakter.

MySQL understøtter ikke indsættelser i flere tabeller på samme tid. Du skal enten udføre to INSERT sætninger i din kode ved at bruge det sidste indsættelses-id fra den første forespørgsel, eller opret en AFTER INSERT trigger på den primære tabel.

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)

Eller ved at bruge en 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. Hvordan kontrollerer man, om en given data findes i flere tabeller (som alle har den samme kolonne)?

  2. Indstil postgresql-skemasti permanent

  3. Få den maksimalt tilladte længde i kolonne, mysql

  4. Hvilken DATATYPE er bedre at bruge TEXT eller VARCHAR?