2014-02-27 41 views
1

我有查询来选择获取答案值。我需要检查它是否应答或为空。我用(d.AM_Answer或null)它不起作用。它只取空值。所以,我改变了我的下面的查询,但它不工作。如何使用IF和ELSE语句进行sql查询

SELECT a.QM_ID, 
     a.QM_QCM_ID, 
     a.QM_Question, 
     a.QM_Type, 
     a.QM_Parent_Id, 
     c.AM_Answer, 
     c.AM_Comments 
FROM question_master a 
INNER JOIN Assessment_master c ON (c.AM_QM_ID = a.QM_ID 
            AND c.AM_HNM_ID = %d 
            AND c.AM_HM_ID = %d 
            AND c.AM_ASM_Local_Id = %@) 
WHERE a.QM_Parent_Id = 0 
    AND a.QM_Status = 'A' 
    AND a.QM_QCM_ID = %@ 
    AND a.QM_QRM_Id = %@ IF(d.AM_Answer IS NULL) THEN 
UNION 
SELECT b.QM_ID, 
     b.QM_QCM_ID, 
     b.QM_Question, 
     b.QM_Type, 
     b.QM_Parent_Id, 
     NULL, 
     NULL 
FROM question_master b 
INNER JOIN Assessment_master d ON ((d.AM_QM_ID = b.QM_Parent_Id 
            OR d.AM_QM_ID = b.QM_ID) 
            AND d.AM_HNM_ID = %d 
            AND d.AM_HM_ID = %d 
            AND d.AM_ASM_Local_Id = %@) 
WHERE b.QM_Parent_Id != 0 
    AND b.QM_Status = 'A' 
    AND b.QM_QCM_ID = %@ 
    AND b.QM_QRM_Id = %@ ELSE IF(d.AM_Answer IS NOT NULL) THEN 
UNION 
SELECT b.QM_ID, 
     b.QM_QCM_ID, 
     b.QM_Question, 
     b.QM_Type, 
     b.QM_Parent_Id, 
     d.AM_Answer, 
     d.AM_Comments 
FROM question_master b 
INNER JOIN Assessment_master d ON ((d.AM_QM_ID = b.QM_Parent_Id 
            OR d.AM_QM_ID = b.QM_ID) 
            AND d.AM_HNM_ID = %d 
            AND d.AM_HM_ID = %d 
            AND d.AM_ASM_Local_Id = %@) 
WHERE b.QM_Parent_Id != 0 
    AND b.QM_Status = 'A' 
    AND b.QM_QCM_ID = %@ 
    AND b.QM_QRM_Id = %@ END IF 
+0

从http://dev.mysql.com/doc/refman/5.7/en/working-with-null.html:不能使用算术比较运算符(如=,<, or <>)来测试NULL。 – mcalex

+0

@mcalex他可以使用IS NULL –

+0

我猜它知道goves你的错误,因为联合关键字 –

回答

0

1)要检查空值,可以使用COALESCE运算符。

2)您也可以使用SQL CASE语句

3)我建议你为你准备一个动态查询

+0

哪里可以更改我的代码 – user3351727

+0

您可以在查询中说明每个联合的目的吗? –

0

使用存储过程,这个你可以把这里的条件d.answer是不为null以选择非空答案。

0

尝试

IF(d.AM_Answer IS null) 

,而不是

IF(d.AM_Answer == null)