要么只获取具有指定@Lastname的那些userID,要么获得@LastName ='All',即使它们的NULL值为LastName,也会获得所有用户ID。
xmlns:my="clr-namespace:MyWpfApplication.MyNamespace"
上述查询仅返回LastName不为NULL的那些userID。
答案 0 :(得分:3)
将您的条件更改为:
where (@LastName = 'All' and 1=1) or (LastName = @LastName)
我们的想法是,当@LastName
='全部'时,您的查询不应包含任何过滤器。 1 = 1条件将始终为真,并且与其他检查一起应返回所有结果。查询可以采用的另一个路径是按特定的姓氏进行过滤,该名称肯定会排除空值。
更新:1 = 1条件是多余的。您可以将条件重写为:
where (@LastName = 'All') or (LastName = @LastName)
答案 1 :(得分:2)
答案 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);