MySQL tiene una funcionalidad especial en esta situación. Se llama INSERT...ON DUPLICATE KEY UPDATE
. Lo que hace es intentar INSERT
un registro, pero si ya existe, simplemente UPDATE
eso. '
Para que esta funcionalidad funcione, debe tener un UNIQUE
restricción sobre la mesa. Según su ejemplo, puedo ver que está comprobando la existencia de las dos columnas. Si ya tienes una PRIMARY KEY
, solo puede agregar un UNIQUE
restricción en ambas columnas.
ALTER TABLE oc_product_attribute
ADD CONSTRAINT tb_uq UNIQUE(PRODUCT_ID, ATTRIBUTE_ID)
Una vez que se haya ejecutado, ahora puede usar INSERT..ON DUPLICATE KEY UPDATE
INSERT INTO oc_product_attribute (PRODUCT_ID, ATTRIBUTE_ID, OtherCol, TEXT)
SELECT MAX(PRODUCT_ID), MAX(ATTRIBUTE_ID), 1, 'XYZ'
FROM
(
SELECT PRODUCT_ID, NULL ATTRIBUTE_ID
FROM oc_product_description
WHERE NAME = 'PRODUCT_NAME_HERE'
UNION ALL
SELECT NULL PRODUCT_ID, ATTRIBUTE_ID
FROM oc_attribute_description
WHERE NAME='ATTRIBUTE_NAME_HERE'
) x
ON DUPLICATE KEY UPDATE TEXT = 'ABC'
-- change OtherCol to the name of your column which you want to insert 1