Условное обновление / вставка в MySQL - PullRequest
0 голосов
/ 03 июля 2011

Я нашел здесь тему о запросе MySQL IF, ELSE, я адаптировал его, но не могу понять, в чем проблема с ним.

Вот запрос:

IF (SELECT * FROM `jos_import03_07_2011` WHERE `cod_oem` = 'OP-4CL') IS NULL THEN 
INSERT INTO `jos_import03_07_2011` (`tip_imp`, `tip_produs`, `producator`,
    `cod_intern`, `desc`, `cod_oem`, `pret`, `valuta`) VALUES ('Imprimanta Laser', 
    'Piese Schimb', 'BROTHER', 'BR-200503', '', 'OP-4CL', '338.49', 'EUR'); 
ELSE UPDATE `jos_import03_07_2011` SET `pret` = '338.49' WHERE `cod_oem` = 'OP-4CL';
END IF;

А вот и ошибка:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL     
server version for the right syntax to use near 'IF (SELECT * FROM   
`jos_import03_07_2011` WHERE `cod_oem` = 'OP-4CL') IS NULL THE' at line 1

Это оригинальный пост:

Условный оператор mySQL. Если true, UPDATE, если false, INSERT

Спасибо, Себастьян

UPDATE

Код ошибки для IF EXISTS:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL 
server version for the right syntax to use near 'IF EXISTS (SELECT * FROM 
`jos_import03_07_2011` WHERE `cod_oem` = 'OP-4CL') THEN' at line 1 

1 Ответ

2 голосов
/ 03 июля 2011

По какой-либо причине вы не можете использовать синтаксис INSERT ... ON DUPLICATE ?

INSERT INTO `jos_import03_07_2011` (`tip_imp`, `tip_produs`, `producator`,
    `cod_intern`, `desc`, `cod_oem`, `pret`, `valuta`)
VALUES ('Imprimanta Laser', Piese Schimb', 'BROTHER', 'BR-200503', '', 'OP-4CL', '338.49', 'EUR')
ON DUPLICATE KEY UPDATE SET pret = VALUES(pret)

будет гораздо эффективнее: на один запрос меньше и кода для отладки.

...