sql >> Base de Datos >  >> RDS >> Mysql

Insertar usando LEFT JOIN e INNER JOIN

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