我想从同一sp中选择所有客户或一个客户。现在,我们正在拨出两个SP,以获取这些详细信息:
即。吸引所有客户:
select id, name from customers
和一个客户:
select id, name from customers
where id=id_from_input
为了使它们普遍,我认为将id_from_input
视为无效,以吸引所有客户。我尝试了几种方法来制作一种有条件的方法,即我的SQL中的声明可以与该计划一起使用,但没有任何作用。例如:
select id, name from customers
where if(id_from_input <> null) id=id_from_input; end if
给我语法错误。
如何制作一个where
子句,该子句在id_from_input
为null时返回所有行,否则匹配行?
表达式 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)
用例语句实现您的结果:
SELECT id, name FROM customers WHERE id = CASE WHEN ISNULL(id_from_input,'')
<> '' THEN id_from_input ELSE id END
尝试使用or
:
select id, name
from customers
where id_from_input is null or id = id_from_input
如果id_from_input
为null,则or
子句将不会计算。
尝试此查询
select id, name from customers where
CASE WHEN id_from_input<>null THEN id=id_from_input
ELSE id END