0

我的项目中有一条关于 sql 语句的问题。编码

IF EXISTS (SELECT * FROM person_drug WHERE drug_id=3 AND person_id=1)
BEGIN
   UPDATE person_drug SET amount=3 WHERE drug_id=3 AND person_id=1
END
ELSE
BEGIN
   INSERT INTO person_drug VALUES (1,3,3)
END

当我运行它时,我得到:

1064 - 您的 SQL 语法错误中有错误。

但是当我UPDATE,SELECT,INSERT单独运行上面的语句时,我没有收到任何错误。可能是什么问题?

谢谢

4

3 回答 3

1

MySQL 的流控制语句 ( IF/ELSE/WHILE) 只能在存储过程或函数的上下文中使用。它们不适用于交互式查询。

最好的解决方案是利用适当的索引和唯一性约束。

如果您在 中定义了主键或唯一索引(drug_id, person_id),那么您可以在一个语句中使用ON DUPLICATE KEY UPDATE并执行整个操作:

/* key ensures uniqueness for drug_id, person_id */
ALTER TABLE person_drug ADD UNIQUE KEY (drug_id, person_id);

/* Then it's possible to use INSERT .. ON DUPLICATE KEY UPDATE */
INSERT INTO person_drug (drug_id, person_id, amount) 
  VALUES (3, 1, 3)
  ON DUPLICATE KEY UPDATE amount = VALUES(amount)
于 2013-03-05T19:33:28.613 回答
0

如果您制作存储过程意味着您可以这样做:

设置 ANSI_NULLS ON 设置 QUOTED_IDENTIFIER ON GO

创建过程人员

开始

SET NOCOUNT ON;



IF EXISTS 
(SELECT * FROM person_drug WHERE drug_id=3 AND person_id=1)

BEGIN UPDATE person_drug SET amount=3 WHERE drug_id=3 AND person_id=1 END ELSE BEGIN INSERT INTO person_drug VALUES (1,3,3)

结束 结束 GO

于 2013-03-06T05:28:44.943 回答
0
    BEGIN
       IF EXISTS (SELECT * FROM person_drug WHERE drug_id=3 AND person_id=1)
       UPDATE person_drug SET amount=3 WHERE drug_id=3 AND person_id=1
    ELSE
       INSERT INTO person_drug VALUES (1,3,3)
    END IF;
于 2013-03-05T19:31:25.977 回答