MySQL hat für diese Situation eine spezielle Funktionalität. Es heißt INSERT...ON DUPLICATE KEY UPDATE
. Was es tut, ist, es versucht INSERT
ein Datensatz, aber wenn er bereits existiert, wird er nur UPDATE
es. '
Damit diese Funktion funktioniert, benötigen Sie einen UNIQUE
Einschränkung auf dem Tisch. Anhand Ihres Beispiels kann ich sehen, dass Sie die beiden Spalten auf ihre Existenz überprüfen. Wenn Sie bereits einen PRIMARY KEY
haben , können Sie einfach einen UNIQUE
hinzufügen Einschränkung für beide Spalten.
ALTER TABLE oc_product_attribute
ADD CONSTRAINT tb_uq UNIQUE(PRODUCT_ID, ATTRIBUTE_ID)
Sobald es ausgeführt wurde, können Sie nun INSERT..ON DUPLICATE KEY UPDATE
verwenden
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