我想从同一个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
子句,否则匹配行?
答案 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 null
或is 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