mysql - 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 ,但它还没有工作。
如何解决这个问题?
解决方案
您只能在存储的程序中使用流控制语句。在插入具有显式 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);
推荐阅读
- mysql - 所有条件都有效,因为一个条件应该同时运行 CASE MySQL
- php - 如何使用 Heroku 部署 Laravel + Vue 项目
- unicode - 使用大于 0xFFFF 的字符
- java - 如何向 Java 中的类库添加一个小的附加包?
- javascript - 如何根据事件正确指定列的可见性?
- oracle - Solaris Client 8.1.7 无法连接到 Oracle 12C R1
- javascript - Google Drive 未加载 pdf 链接
- php - 在 php 中显示的总和值
- sql - 在 table1 中选择值、Group By、Sum 的存储过程,然后将这些值插入到 table2 中
- ios - 如何将 dateFormatter 值(例如 2019 年 7 月 7 日)从时间戳转换为 2019 年 7 月 7 日?