Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Inserir usando LEFT JOIN e INNER JOIN


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