2015-11-09 20 views
0

我有這樣的查詢:選擇NULL或NOT NULL取決於參數

SELECT old.NPP, 
     old.NAMA, 
     old.JOB, 
     pgh.status 
    FROM a old 
    LEFT JOIN b pgh ON old.person_id = pgh.person_id 
        AND pgh.periode = 2015 
        AND pgh.LAST_STATUS = 1 
    WHERE old.UNIT_BESARAN = 'DIVISI TEKNOLOGI INFORMASI' 
    AND pgh.status = #status 
    ORDER BY pgh.status 

我希望我的查詢可以從PGH狀態,就像當我輸入狀態5,查詢必須返回狀態的每一個值是5,但是當我輸入null時,查詢將在狀態爲空時從數據庫返回數據。

如何設置查詢?

+0

我不明白你的查詢如何返回數據時#status爲空,因爲在MySQL中返回空值,你必須使用'pgh.status IS NULL'。你確定這些值實際上不是空字符串嗎? – Lock

+0

@Lock的值是空字符串,我可以得到數據null當我使用狀態爲null。但狀態是一個參數,它將是任何類型的值,如1或2或3或null。當我嘗試使用null時,絕對不能輸入1或2或3的值。但是,當我使用pgh.status =#狀態,當我輸入null時,我無法獲得空值,不是嗎? – user3505775

回答

1

你可以寫的條件是這樣的:

where old.UNIT_BESARAN = 'DIVISI TEKNOLOGI INFORMASI' and 
     (pgh.status = #status or pgh.status is null and #status is null) 
+0

當我嘗試在#status中輸入null時,查詢不返回任何數據 – user3505775

+0

@ user3505775。 。 。你的問題中有'#status'。我想你明白它是什麼。 –

0

如果我理解你的情況正確的,我認爲這是空字符串,所以要確保條件是正確的。只需使用ISNULL

SELECT old.NPP, 
     old.NAMA, 
     old.JOB, 
     pgh.status 
FROM a old 
    LEFT JOIN b pgh ON old.person_id = pgh.person_id 
        AND pgh.periode = 2015 
        AND pgh.LAST_STATUS = 1 
WHERE old.UNIT_BESARAN = 'DIVISI TEKNOLOGI INFORMASI' 
AND pgh.status = ISNULL(#status,'') 
ORDER BY pgh.status 
+0

當我嘗試設置狀態參數值1,我得到像「ISNULL」的錯誤:無效標識符 – user3505775