2014-12-02 38 views
1

else条件我想查天气THW柱的存在与否检查柱如果SQL

IF (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'tb_consumer' AND COLUMN_NAME='businness_id' > 0) THEN 
PRINT 'test' 

哪些错误与上面的SQL存在?出现错误为

您的SQL语法错误;检查对应于你的MySQL服务器版本正确的语法使用近“IF(SELECT COUNT(*)information_schema.columns在表格=‘tb_consu’在行1

新建SQL手册。谢谢任何帮助,

的MySQL版本为5.x

+0

您是在存储过程内还是作为普通查询的一部分尝试此操作? – Olli 2014-12-02 13:43:48

+0

@Olli普通查询。不在SP中。 – 2014-12-02 13:45:54

回答

3

您可以通过移动关闭括号修复查询:

IF (SELECT COUNT(*) 
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE TABLE_NAME = 'tb_consumer' AND COLUMN_NAME = 'businness_id' 
    ) > 0 THEN 
PRINT 'test' 

一种更好的方式来写的条件是使用exists

IF EXISTS (SELECT 1 
      FROM INFORMATION_SCHEMA.COLUMNS 
      WHERE TABLE_NAME = 'tb_consumer' AND COLUMN_NAME = 'businness_id' 
     ) THEN 
+0

我的版本不支持IF EXISTS。 – 2014-12-02 13:48:23

+0

为什么地球上这两个查询都向我抛出错误:( 对于查询1,错误消息是:'错误代码:1064 您的SQL语法有错误;请检查与您的MySQL服务器版本对应的手册(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME =''at line 1' – 2014-12-02 14:03:26

+0

@sᴜʀᴇsʜᴀᴛᴛᴀ...在MySQL中,只有在代码块中才允许使用'if'语句,例如作为存储过程,存储函数和触发器,因为你问了这个问题,我认为代码是在这样的代码块中。 – 2014-12-02 17:12:31

1

SQL命令不是布尔函数。 因此您需要检查值。

像这样:

IF (SELECT COUNT(*) 
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE TABLE_NAME = 'tb_consumer' AND COLUMN_NAME='businness_id') >= 0 
THEN PRINT 'test' 
1

如果您尝试使用这个作为一个存储过程的一部分,你可以,如果你这样做,因为一个正常的查询的一部分来看看the if statement in the mysql documentation

,你可以写出像

SELECT IF (COUNT(*) > 0, 'TEST, 'TEST FAILED') FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'tb_consumer' AND COLUMN_NAME='businness_id' 
1

我建议在MYSQL

使用CASE语句

在较小的数据库上,案件陈述的速度更快