2012-11-20 61 views
24

我下面的查詢:「?」SQL查詢,如果參數爲null,選擇所有

SELECT NAME, SURNAME FROM MY_TABLE WHERE NAME = ?; 

現在我想,如果爲NULL,所有記錄必須被選中。 我如何在SQL中實現這一點? 感謝

+0

這讓我討厭的T-SQL甚至更多... –

回答

20

您也可以使用函數IFNULLCOALESCENVLISNULL檢查空值。這取決於你的RDBMS。

MySQL的

SELECT NAME, SURNAME FROM MY_TABLE WHERE NAME = IFNULL(?,NAME); 

SELECT NAME, SURNAME FROM MY_TABLE WHERE NAME = COALESCE(?,NAME); 

ORACLE

SELECT NAME, SURNAME FROM MY_TABLE WHERE NAME = NVL(?,NAME); 

SQL服務器/SYBASE

SELECT NAME, SURNAME FROM MY_TABLE WHERE NAME = ISNULL(?,NAME); 
+1

如果'NAME'中有空值,這將不起作用。但是對於不可爲空的列,這是要走的路徑=)(編輯:至少不在SQL Server中) –

+0

請注意,這會產生較慢的查詢,而不是調整SQL,使其在參數爲空時不包含where子句。 – Kram

53

試試這個:

SELECT * 
FROM MY_TABLE 
WHERE @parameter IS NULL OR NAME = @parameter; 
+0

如何在PHP中使用呢? – prograshid

+0

@prograshid - 只需在PHP中執行查詢 –

+0

我試圖執行查詢字符串,但它在訪問結果時給出。說未定義的函數調用fetch_assoc – prograshid