Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Insertar si existe modificar - MySQL (https://www.clubdelphi.com/foros/showthread.php?t=76542)

pablonill 08-11-2011 15:12:07

Insertar si existe modificar - MySQL
 
Buenos dias, antes que nada gracias por su atencion!. Tengo la siguiente tabla.

Código SQL [-]
CREATE TABLE `productos` (
  `codigo` varchar(20) NOT NULL,
  `detalle` varchar(60) NOT NULL,
  `proveedor` int(11) DEFAULT NULL,
  `precio_actual` float(9,2) DEFAULT NULL,
  `precio_anterior` float(9,2) DEFAULT NULL,
  `fecha_modificacion` date DEFAULT NULL,
  PRIMARY KEY (`codigo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Necesito hacer lo siguiente, me traen una lista de precios de productos, en caso de que no exista debo insertarlo en caso de que exista debo actualizar el precio del producto, esta consulta funciona bien para un registro.

Código SQL [-]
INSERT INTO productos (codigo, detalle, proveedor, precio_actual, fecha_modificacion)
VALUES
(001000005,'TUBOS POLIETILENO 1/2"K10',1,368.42,'2011/11/08')
ON DUPLICATE KEY UPDATE precio_actual = 368.42;

Pero necesito saber como hacer esta consulta para varios registros, ya que hacerlo uno por uno se pone inmensamente lento. Aclaracion uso MySQL. Muchas gracias.

roman 08-11-2011 16:11:05

Hola,

Quiero suponer que donde escribiste

Código SQL [-]
ON DUPLICATE KEY UPDATE precio_actual = 368.42;

en realidad es

Código SQL [-]
ON DUPLICATE KEY UPDATE precio_actual = 1368.42;

de lo contrario, no entiendo cuál es el valor de actualización.

El manual de MySQL menciona el uso de la función values para la cláusula update para inserciones masivas. Quedaría algo así:

Código SQL [-]
INSERT INTO productos (codigo, detalle, proveedor, precio_actual, fecha_modificacion)
VALUES
  (001000005, 'TUBOS POLIETILENO 1/2"K10', 1, 368.42, '2011/11/08'),
  (001000006, 'OTRO PRODUCTO', 1, 512.26, '2011/11/10')
ON DUPLICATE KEY UPDATE precio_actual = VALUES(precio_actual);

// Saludos

pablonill 08-11-2011 17:29:30

Hola roman, muchas gracias por la pronta respuesta!, esta bien la consulta como figura!

Si se hace el insert el precio es 368.42 en caso de que exista actualizamos el precio con 368.42, espero ser claro!

En cuanto a la consulta que me pusiste la hice pero sin el identificador VALUES, ya lo pruebo y te comento. Muchas gracias.

roman 08-11-2011 18:18:30

Estaba confundido; leí la columna 1 como parte del dato del precio.

En todo caso, por lo que veo, no puedes omitir el values, a menos que actualices con un precio fijo todos los productos ya existentes.

// Saludos

pablonill 09-11-2011 11:01:36

Listo roman, muchas gracias, probado y confirmado.


La franja horaria es GMT +2. Ahora son las 16:08:52.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi