Трябва да сте конкретни за колоните, които избирате. Ако вашият 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