仅当设置了 item 时才使用 WHERE 子句,否则选择所有行
Posted
技术标签:
【中文标题】仅当设置了 item 时才使用 WHERE 子句,否则选择所有行【英文标题】:Use WHERE clause only if item is set, otherwise select all rows 【发布时间】:2020-07-19 21:22:36 【问题描述】:在我的 Apex Oracle 应用程序中,我有一个使用此 sql 查询的报告:
select ID,
NAME,
ADDRESS,
TYPE,
COMPANY_ID as "Company"
from WORKSTATIONS where COMPANY_ID = :P11_FILTER
按 :P11_FILTER 项的值过滤数据。现在,如果 :P11_FILTER 未设置或为 NULL,我需要选择所有行。我如何修改 where 子句以实现这一点?
【问题讨论】:
【参考方案1】:您可以使用coalesce()
或nvl()
:
where COMPANY_ID = coalesce(:P11_FILTER, COMPANY_ID)
当:P11_FILTER
为null
时,coalesce(:P11_FILTER, COMPANY_ID)
返回COMPANY_ID
。
请注意,在COMPANY_ID
和参数都是NULL
的情况下,此where
子句不匹配。这与OR
解决方案不同,后者将在此处返回NULL
行。
【讨论】:
这假定COMPANY_ID
不为空。也许在 OP 的情况下就是这种情况,但应该明确说明假设。无论如何,Gordon 的解决方案可能更有效。
@mathguy:确实。我编辑了我的答案以具体说明这一点。【参考方案2】:
一种方法使用or
:
where COMPANY_ID = :P11_FILTER or :P11_FILTER is null
【讨论】:
以上是关于仅当设置了 item 时才使用 WHERE 子句,否则选择所有行的主要内容,如果未能解决你的问题,请参考以下文章
仅当“模块”选项设置为“esnext”时才允许使用***“等待”表达式
不使用`where`子句,但得到错误:“未知列 在where子句中“