sql如果存在简单的语法错误

时间:2012-11-16 02:26:57

标签: mysql sql

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

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

上都得到了这个

3 个答案:

答案 0 :(得分:2)

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

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

这将返回10,然后您可以使用服务器端脚本进行解析。它给你一个语法错误的原因是因为MySQL IF语句采用IF(condition, <action if true>, <action if false>)形式,没有使用THENELSE(在编程语言中很常见) 。此外,MySQL没有明确的PRINT语句,但您可以使用SELECT在某种程度上完成上述要求(请注意,我们可以删除EXISTS,因为如果结果没有返回):

SELECT IF(
      (SELECT 1 FROM City WHERE name = 'Perth'),
      (SELECT 'Record exists - update'),
      (SELECT 'Record does not exist - Insert')
)

答案 1 :(得分:1)

您需要按照以下方式使用“选择”代替print

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

SQL Fiddle Demo。以下显示了在select Statement

中使用IF
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),则会打印第一条消息,否则您将收到第二条消息

答案 2 :(得分:0)

另一种方法:使用分组功能将始终返回记录。如果没有要操作的记录,则按功能分组的结果将为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)