2012-11-20 62 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