我的SQL:在where语句中添加if条件?

时间:2017-02-27 06:30:52

标签: mysql sql null

我想从同一个SP中选择所有客户或一个客户。现在我们正在维护两个SP来获取这些细节:

即。为了吸引所有客户:

select id, name from customers

并获得一位客户:

select id, name from customers
where id=id_from_input

为了使它们变得普遍,我想把id_from_input作为null来获取所有客户。我尝试了几种方法在我的sql中使用条件where语句来处理这个计划,但没有任何工作。例如:

select id, name from customers
where if(id_from_input <> null) id=id_from_input; end if

给我语法错误。

如何在where为空时返回所有行的id_from_input子句,否则匹配行?

4 个答案:

答案 0 :(得分:1)

使用CASE语句来实现结果:

SELECT id, name FROM customers WHERE id = CASE WHEN ISNULL(id_from_input,'') 
<> '' THEN id_from_input ELSE id END

答案 1 :(得分:1)

表达式x <> null永远不会成立;您只能使用is nullis not null来测试null。纠正你的尝试给出了:

select id, name from customers
where id_from_input is null or id = id_from_input

或更简洁的东西(和恕我直言优雅):

select id, name from customers
where id = coalesce(id_from_input, id)

答案 2 :(得分:0)

尝试使用or

select id, name
from customers
where id_from_input is null or id = id_from_input

如果id_from_input为null,则不会计算or子句。

答案 3 :(得分:0)

尝试此查询

select id, name from customers where CASE WHEN id_from_input<>null THEN id=id_from_input ELSE id END

相关问题