【问题标题】:SQL syntax for "if exists"“如果存在”的 SQL 语法
【发布时间】:2021-06-17 05:42:26
【问题描述】:

为什么我会收到此错误:

#1064 - 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 id FROM mytable WHERE id = '1')' at line 1 

我的 SQL 查询:

IF EXISTS(SELECT id FROM mytable WHERE id = '1')

谢谢。

【问题讨论】:

  • 我们需要查看您尝试使用的其余代码。
  • 这是整个查询吗? IF 语句在做什么?后面不应该有语句块吗?
  • 是的,如果这是整个查询 - 它不起作用,因为它不是一个完整的语句。如果不是,我们需要其他人来判断发生了什么。

标签: sql mysql mysql-error-1064


【解决方案1】:

IF EXISTS 仅适用于存储过程。在存储过程之外,IF() 是一个接受 3 个参数的函数。正确使用会是

SELECT IF(EXISTS(SELECT `column` FROM `table` WHERE `id` = `1`), 1, 0);

【讨论】:

    【解决方案2】:

    现在不在 MySQL 机器上,但看起来像它,因为语句不完整,如果 id 存在,你需要告诉它该怎么做。

    IF EXISTS(...) 做点什么

    【讨论】:

      【解决方案3】:

      IF EXISTS 在 MySQL 中没有任何意义。 请参阅 MySQL 文档中的 subqueries with EXISTS or NOT EXISTS 使用。

      基本上,你需要在语句中使用它,而不仅仅是像一个逻辑块

      【讨论】:

      • IF EXISTS 经常在 SQL Server 中使用,因为它比 IF(SELECT COUNT()...) > 0 等更简洁。
      【解决方案4】:

      尝试使用

      Declare @ID Integer
      Select @ID=id From mytable where id=1
      IF @ID is not null    OR  IF @ID > 0
      Begin
      ....
      End
      

      【讨论】:

      • 没关系。即使id 是整数,WHERE id = '1' 也能正常工作。
      • 我同意 Mark Byers - MySQL 在 INT 和字符串数据类型之间进行隐式数据类型转换。
      • 感谢您的评论,您是对的,我已经更新了我的帖子。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-23
      • 1970-01-01
      • 1970-01-01
      • 2011-01-09
      • 2012-12-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多