2014-02-27 38 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)