WHERE如果不满足条件,则获取包括NULL的所有值

时间:2015-06-23 10:23:51

标签: mysql sql

要么只获取具有指定@Lastname的那些userID,要么获得@LastName ='All',即使它们的NULL值为LastName,也会获得所有用户ID。

xmlns:my="clr-namespace:MyWpfApplication.MyNamespace"

上述查询仅返回LastName不为NULL的那些userID。

4 个答案:

答案 0 :(得分:3)

将您的条件更改为:

where (@LastName = 'All' and 1=1) or (LastName = @LastName)

我们的想法是,当@LastName ='全部'时,您的查询不应包含任何过滤器。 1 = 1条件将始终为真,并且与其他检查一起应返回所有结果。查询可以采用的另一个路径是按特定的姓氏进行过滤,该名称肯定会排除空值。

更新:1 = 1条件是多余的。您可以将条件重写为:

where (@LastName = 'All') or (LastName = @LastName)

Demo

答案 1 :(得分:2)

另一种较短的形式

where @LastName in ('All', LastName);

SqlFiddle

答案 2 :(得分:0)

SELECT userID FROM users
WHERE
    CASE WHEN @LastName = 'All' THEN LastName = LastName
    ELSE LastName = @LastNam END
;

答案 3 :(得分:0)

你也可以试试 -

SELECT * FROM users 
WHERE IF(@lastname<>'all',lastname=@lastname,1=1);

如果@lastname包含多个姓氏,那么您可以使用以下查询 -

SELECT * FROM users 
WHERE IF(@lastname<>'all',FIND_IN_SET(lastname,@lastname),1=1);