una tipos tablas soporta segundo rapida por optimizar mas lentas inner hacer ejemplos cuantas consultas consulta como mysql left-join inner-join

mysql - tipos - Insertar usando LEFT JOIN y INNER JOIN



tipos de join mysql (2)

Hola, estoy tratando de encontrar la manera de insertar un nuevo registro con la siguiente consulta:

SELECT user.id, user.name, user.username, user.email, IF(user.opted_in = 0, ''NO'', ''YES'') AS optedIn FROM user LEFT JOIN user_permission AS userPerm ON user.id = userPerm.user_id ORDER BY user.id;

Mi consulta INSERT hasta ahora es esta:

INSERT INTO user SELECT * FROM user LEFT JOIN user_permission AS userPerm ON user.id = userPerm.user_id;

Sin embargo, no estoy seguro de cómo hacer VALUE('''','''','''','''', etc etc) cuando se usan uniones hacia la izquierda y hacia adentro.

Entonces, lo que estoy buscando hacer es esto:

Tabla de User :

id | name | username | password | OptIn -------------------------------------------------------------------- 562 Bob Barker bBarker [email protected] 1

Y también la tabla user_permission

user_id | Permission_id ------------------------- 562 4

ACTUALIZAR Así que así?

INSERT INTO user (name, username, password, email, opted_in) VALUES (''Bbarker'',''Bbarker'',''blahblahblah'',''[email protected]'',0); INSERT INTO user_permission (user_id, permission_id) VALUES (LAST_INSERT_ID(),4);


Debe ser específico sobre las columnas que está seleccionando. Si su tabla de user tenía cuatro columnas id, name, username, opted_in , debe seleccionar exactamente esas cuatro columnas de la consulta. La sintaxis se ve así:

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 el user . De hecho, este INSERT parece destinado a fallar con violaciones de singularidad de clave primaria.

MySQL no admite inserciones en varias tablas al mismo tiempo. O necesita realizar dos INSERT en su código, utilizando la última identificación de inserción desde la primera consulta, o crear un desencadenador AFTER INSERT 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 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


no puede usar la cláusula VALUES cuando inserta datos usando otra consulta SELECT . 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 );