MySQL中的条件更新/插入

时间:2011-07-03 14:18:47

标签: mysql insert-update

我在这里找到一个关于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

这是原帖:

Conditional mySQL statement. If true UPDATE, if false INSERT

谢谢, 塞巴斯蒂安

更新

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 个答案:

答案 0 :(得分:2)

您有什么理由不能使用INSERT ... ON DUPLICATE KEY语法吗?

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)

效率会更高:查询次数少,调试代码少得多。