如何在 if for MySQL 中使用 select

How to use select inside if for MySQL

我的查询出现“select 在该位置无效,需要一个表达式”错误:

insert into tbl_disease(nid, name, diagnosed_time, treatment_times, inherited) 
values ('314759','high blood pressure','2015-07-01','4',
( if (select count(distinct disease_name) from tbl_disease where disease_name='high blood pressure') >0, 'Y', 'N')); 

post 我读过:MYSQL SELECT WITHIN IF Statement

你能指出我该如何纠正这个问题吗?任何帮助表示赞赏!非常感谢!!!

insert into tbl_disease(nid, name, diagnosed_time, treatment_times, inherited) 
values ('314759',
        'high blood pressure',
        '2015-07-01',
        '4',
        CASE WHEN EXISTS ( select NULL 
                           from tbl_disease 
                           where disease_name='high blood pressure' ) 
             THEN 'Y' 
             ELSE 'N'
             END); 

IF 语法为 IF(boolean expression, result expression if true, result expression if false)。您可以对返回单个值作为布尔表达式的子查询进行比较,但子查询也需要用括号分隔。

所以你需要说:

if((select ...) > 0,'Y','N')

if 后面只有一个 (,它期待下一个表达式。 (select ...)(select ...) > 0 是一个表达式; select ... 不是。

将所有缺少的括号相加,您最终应该得到:

insert into tbl_disease(nid, name, diagnosed_time, treatment_times, inherited)
values ('314759','high blood pressure','2015-07-01','4', ( if (((select count(distinct disease_name) from tbl_disease where disease_name='high blood pressure') >0), 'Y', 'N')) );

删除不需要的:

insert into tbl_disease(nid, name, diagnosed_time, treatment_times, inherited)
values ('314759','high blood pressure','2015-07-01','4', if ((select count(distinct disease_name) from tbl_disease where disease_name='high blood pressure') >0, 'Y', 'N') );