仅当设置了 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_FILTERnull 时,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 子句,否则选择所有行的主要内容,如果未能解决你的问题,请参考以下文章

仅当表中不存在两个 id 的组合时才将值插入表中

仅当“模块”选项设置为“esnext”时才允许使用***“等待”表达式

仅当我从设置中禁用通知时才收到通知声音

不使用`where`子句,但得到错误:“未知列 在where子句中“

仅当将 2 个类设置为一个元素时才应用 CSS 规则[重复]

仅当 .includes() 使用 .find() 找到某些内容时才返回值