Debe ser específico acerca de las columnas que está seleccionando. Si su user
la tabla tenía cuatro columnas id, name, username, opted_in
debe seleccionar exactamente esas cuatro columnas de la consulta. La sintaxis se parece a:
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
Sin embargo, no parece haber ninguna razón para unirse contra user_permission
aquí, ya que ninguna de las columnas de esa tabla se insertaría en user
. De hecho, este INSERT
parece destinado a fallar con violaciones de unicidad de clave principal.
MySQL no admite inserciones en varias tablas al mismo tiempo. Debe realizar dos INSERT
declaraciones en su código, usando la última identificación de inserción de la primera consulta, o cree un AFTER INSERT
activador en la tabla principal.
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)
O usando un disparador :
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