Трябва да сте конкретни за колоните, които избирате. Ако вашият user
таблицата имаше четири колони id, name, username, opted_in
трябва да изберете точно тези четири колони от заявката. Синтаксисът изглежда така:
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
Изглежда обаче няма причина да се присъедините срещу user_permission
тук, тъй като нито една от колоните от тази таблица няма да бъде вмъкната в user
. Всъщност това INSERT
изглежда неизбежно се провали с нарушения на уникалността на първичния ключ.
MySQL не поддържа вмъквания в няколко таблици едновременно. Трябва или да изпълните две INSERT
изрази във вашия код, като използвате последния идентификатор за вмъкване от първата заявка или създайте AFTER INSERT
тригер на основната маса.
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)
Или с помощта на задействане :
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