首页 > 解决方案 > SQL 查询中的 IF NOT EXISTS 出现此错误:无法识别的语句类型。(在位置 0 的“如果不存在”附近)

问题描述

我正在使用这个 sql 查询:

IF NOT EXISTS(SELECT 1 FROM Payments WHERE CustomerID = '145300')
    INSERT INTO Payments(CustomerID,Amount)
    VALUES('145300',12.33)

但我收到此错误:

Error
Static analysis:

1 errors were found during analysis.

Unrecognized statement type. (near "IF NOT EXISTS" at position 0)
SQL query: Documentation

IF NOT EXISTS(SELECT 1 FROM Payments WHERE CustomerID = '145300') INSERT INTO Payments(CustomerID,Amount) VALUES('145300',12.33)

MySQL said: Documentation

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'INSERT INTO Payments(CustomerID,Amount)
    VALUES('145300',12.33)' at line 2

我正在使用的这个 SQL 查询来自此链接中问题的答案:sql query

基于另一个答案,我什至在该语句的末尾使用了 END IF ,但它还没有工作。

如何解决这个问题?

标签: mysqlsql

解决方案


您只能在存储的程序中使用流控制语句。在插入具有显式 PK 值的行时使用 INSERT IGNORE。或者,如果CustomerID不是偶然的PK

 insert Payments(CustomerID,Amount)
 select * 
 from (
        values row ('145300',12.33) 
      ) t(CustomerID,Amount)
 where not exists (select 1 
                   from Payments p 
                   where p.CustomerID = t.CustomerID);

推荐阅读