sql >> Databasteknik >  >> RDS >> Mysql

Sätt i med LEFT JOIN och INNER JOIN

Du måste vara specifik om de kolumner du väljer. Om din user Tabellen hade fyra kolumner id, name, username, opted_in du måste välja exakt dessa fyra kolumner från frågan. Syntaxen ser ut som:

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

Det verkar dock inte finnas någon anledning att gå med mot user_permission här, eftersom ingen av kolumnerna från den tabellen skulle infogas i user . Faktum är att denna INSERT verkar oundvikligt att misslyckas med överträdelser av primärnyckels unikhet.

MySQL stöder inte infogning i flera tabeller samtidigt. Du måste antingen utföra två INSERT satser i din kod, med det sista infognings-id:t från den första frågan, eller skapa en AFTER INSERT trigger på den primära tabellen.

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 med 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. Java-typ för datum/tid när du använder Oracle Date med Hibernate

  2. gem installation:Det gick inte att bygga gem native extension (kan inte hitta header-filer)

  3. MySQL endast inom innevarande månad?

  4. Komma igång med Oracle Autonomous Database i molnet