根据输入参数使用内连接或外连接 - 不使用动态 sql
Posted
技术标签:
【中文标题】根据输入参数使用内连接或外连接 - 不使用动态 sql【英文标题】:Using inner or outer join based on input parameter - without using dynamic sql 【发布时间】:2021-12-01 12:15:32 【问题描述】:不使用动态sql,是否可以根据参数的值来条件连接到外部或内部?
我的意思是,如果给定一个参数(过滤器值),那么查询必须 返回完全匹配的记录(或 0 条记录) - 充当 inner join 如果未提供此过滤器,则需要返回所有 记录 - 充当外部联接【问题讨论】:
也许吧。取决于过滤器适用于哪个表。如果您的查询是外连接,但您将谓词应用于要外连接的表,则有效地将查询转换为内连接。然而,同样的事情不适用于驾驶台。 情况是条件适用于外联表,那么我们如何通过一个不存在的值对该表进行过滤时得到0条记录呢? 【参考方案1】:如果过滤器在您要外部加入的表上
select some_columns
from left l
left outer join right r
on( l.right_id = r.right_id )
where r.filter_column = p_some_parameter
or p_some_parameter is null
似乎就是您所需要的。如果指定了p_some_parameter
,则谓词有效地将outer join
转换为inner join
。如果未指定p_some_parameter
,则查询仍为outer join
。
【讨论】:
以上是关于根据输入参数使用内连接或外连接 - 不使用动态 sql的主要内容,如果未能解决你的问题,请参考以下文章
Java Persistence:根据运行时参数连接不同的列