Você precisa ser específico sobre as colunas que está selecionando. Se o seu
user
tabela tinha quatro colunas id, name, username, opted_in
você deve selecionar exatamente essas quatro colunas da consulta. A sintaxe se parece com: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
No entanto, não parece haver nenhum motivo para ingressar em
user_permission
aqui, já que nenhuma das colunas dessa tabela seria inserida em user
. Na verdade, este INSERT
parece fadado a falhar com violações de exclusividade de chave primária. O MySQL não suporta inserções em várias tabelas ao mesmo tempo. Você precisa executar dois
INSERT
instruções em seu código, usando o último ID de inserção da primeira consulta, ou crie um AFTER INSERT
gatilho na tabela primária. 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)
Ou usando um 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