1 2 3 4 5 6 | -- En SQL Server, esto funcionaria pero en MySQL NO INSERT INTO productos (codProd, descripcion, detalle, stock, precio, imagen) VALUES ( ( SELECT 'P' + RIGHT ( '000' + CONVERT ( varchar (3), MAX ( CONVERT ( int , RIGHT (codProd, 3))) + 1), 3) FROM productos), 'Thor 2' , 'Colección 2020' , 10, 20, 'imagen.jpg' ); |
Código SQL:
INSERT INTO tabla1(campo1, campo2, campo3, ... campo N)
SELECT campo1, campo2, campo3, ...campoN
FROM tabla2
[WHERE loquesea]
En tanto el número y orden de las columnas del SELECT coincida con el número y orden de los datos de la tabla del INSERT, se insertará lo devuelto por el SELECT.
Nota: Al usar VALUES, cada VALUES sólo acepta un único registro a insertar, mientras que el INSERT... SELECT inserta masivamente todo lo que el SELECT devuelva.
Si queremos hacer un INSERT con VALUE + SELECT a otra tabla o la misma tabla en MySQL debemos usar la forma mostrada INSERT + SELECT.
INSERT INTO profesores (id_persona)
SELECT id_persona FROM personas WHERE dni="a";
INSERT INTO profesores (id_persona, activo)
SELECT id_persona, 1
FROM personas
WHERE dni="a";
1 2 3 4 5 6 7 8 | -- Para MySQL debemos hacer lo siguiente, ya que no se permite hacer un SELECT a la misma tabla que se inserta INSERT INTO productos (codProd, descripcion, detalle, stock, precio, imagen) SELECT CONCAT( 'P' , LPAD( MAX ( RIGHT (codProd, 1)+1), 3, '0' )), 'Thor 2' , 'Colección 2020' , 10, 20, 'imagen.jpg' FROM productos; |
No hay comentarios, ¡cuéntame algo!
Me gustaría saber tu opinión. ¡Saludos!