sql >> Databáze >  >> RDS >> Mysql

Vložte pomocí LEFT JOIN a INNER JOIN

Musíte být konkrétní ohledně sloupců, které vybíráte. Pokud váš user tabulka měla čtyři sloupce id, name, username, opted_in musíte vybrat přesně tyto čtyři sloupce z dotazu. Syntaxe vypadá takto:

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

Nezdá se však, že by byl důvod se připojit proti user_permission zde, protože žádný ze sloupců z této tabulky by nebyl vložen do user . Ve skutečnosti toto INSERT Zdá se, že kvůli porušení jedinečnosti primárního klíče selže.

MySQL nepodporuje vkládání do více tabulek současně. Buď musíte provést dvě INSERT příkazy ve vašem kódu pomocí posledního vloženého id z prvního dotazu, nebo vytvořte AFTER INSERT spouště na primární tabulce.

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)

Nebo pomocí spouštěče :

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. Jak mohu hashovat hesla v postgresql?

  2. Několik způsobů, jak vložit rozdělené řetězce s oddělovači do sloupce

  3. Export výsledků dotazu do souboru XML při použití SQLcl (Oracle)

  4. SQL PŘIPOJTE SE mnoho k mnoha