1

我不断收到此语法错误,但在与其他示例进行比较时找不到任何问题。

if EXISTS (select 1 from City where name = 'Perth')
THEN  Print 'Record exits - Update'
ELSE  Print 'Record doesn''t exist - Insert' 

我发现错误:

#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
1 from City where name = 'Perth') THEN Print 'Record e' at line 1

我在zend cloud和普通的phpmyadmin mysql 5上都得到了这个

4

3 回答 3

2

这实际上不是一个有效的 MySQL 查询。看起来您正在尝试将 SQL 与根据查询是否存在来显示输出的方式混合在一起。您可以使用它来返回 SQL 中是否Perth存在:

SELECT EXISTS(SELECT 1 FROM City WHERE name = 'Perth')

这将返回1or 0,然后您可以使用服务器端脚本对其进行解析。它给你一个语法错误的原因是因为 MySQLIF语句采用形式IF(condition, <action if true>, <action if false>),没有使用THENor ELSE(这在编程语言中很常见)。此外,MySQL 没有明确的PRINT声明,但您可以使用它SELECT来完成您想要的上述操作(请注意,EXISTS如果结果不返回任何内容,我们可以删除因为 False 将被暗示):

SELECT IF(
      (SELECT 1 FROM City WHERE name = 'Perth'),
      (SELECT 'Record exists - update'),
      (SELECT 'Record does not exist - Insert')
)
于 2012-11-16T02:55:49.097 回答
1

您需要使用“选择”而不是print以下方式

select IF((select 1 from city where name='Perth'),
'Record exits - Update','Record does not exist - Insert');

SQL 小提琴演示。下面展示了IFin select 语句

IF((select 1 from city where name='Perth'),
'Record exits - Update','Record does not exist - Insert');

IF包含两条消息。

第一:'Record exits - Update'第二:'Record does not exist - Insert'

(select 1 from city where name='Perth')如果有一些结果(相当于 EXISTS),则打印第一条消息,否则您将收到第二条消息

于 2012-11-17T22:26:37.497 回答
0

另一种方法:使用分组函数将始终返回一条记录。如果没有要操作的记录,则 group by 函数的结果将为NULL. 您可以将其用作决策机制。

postgres=# create table city(name text);
CREATE TABLE
postgres=#
postgres=# select COALESCE( max('Record exists - Update'), 'Record doesn''t exist - Insert' ) as state
postgres-#   from city
postgres-#   where name = 'Perth';
             state
-------------------------------
 Record doesn't exist - Insert
(1 row)


postgres=#
postgres=# insert into city values('Perth');
INSERT 0 1
postgres=#
postgres=# select COALESCE( max('Record exists - Update'), 'Record doesn''t exist - Insert' )  as state
postgres-#   from city
postgres-#   where name = 'Perth';
         state
------------------------
 Record exists - Update
(1 row)
于 2012-11-16T03:47:54.790 回答