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