Saltar al contenido

Insertar usando LEFT JOIN e INNER JOIN

Solución:

Tienes que ser específico sobre las columnas que estás seleccionando. Si tu 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 primaria.

MySQL no admite inserciones en varias tablas al mismo tiempo. O necesitas realizar dos INSERT declaraciones en su código, utilizando el último ID de inserción de la primera consulta, o cree un AFTER INSERT disparador en la mesa 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

no puedes usar VALUES cláusula al insertar datos utilizando otro SELECT consulta. ver INSERTAR SINTAXIS

INSERT INTO user
(
 id, name, username, email, opted_in
)
(
    SELECT id, name, username, email, opted_in
    FROM user
         LEFT JOIN user_permission AS userPerm
            ON user.id = userPerm.user_id
);

INSERT INTO Test([col1],[col2]) (
    SELECT 
        a.Name AS [col1],
        b.sub AS [col2] 
    FROM IdTable b 
    INNER JOIN Nametable a ON b.no = a.no
)
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *