Ora SQL 查询:无引用加入
Posted
技术标签:
【中文标题】Ora SQL 查询:无引用加入【英文标题】:Ora SQL Query: joining without references 【发布时间】:2015-03-05 15:42:51 【问题描述】:我正在尝试通过使用简单的查询在 Oracle 上实现一些逻辑并感觉卡在它上面。问题是我不能使用 PL-SQL,这让我有些头疼。
我有三个具有以下值的表
我想得到类似的东西:
SELECT T1.CODE,T2.CODE,T3.VALUE
FROM TABLE1 T1
JOIN TABLE2 T2 ON T1.REF = T2.CODE
JOIN TABLE3 T3 ON T2.REF = T3.CODE
WHERE T1.CODE = XXXXX
XXXX 的结果 = 98
98,2,CCC
只要参数 XXXXX 是 99,98,96,95,它就会返回我所期望的,但我需要的逻辑不适用于 97。
我的要求是,如果我在 Table2 中找不到链接,那么我应该在 Table3 中始终使用 DEF,并将未链接的值保留为 NULL。比如:
XXXX 的结果 = 97
97,NULL,AAA
我认为它可以通过使用 CASE 语句以一种不太“干净”的方式实现,但这是一个显示的列数非常少的示例。在我的真实案例中,它非常大......所以我想尽量避免使用 CASE 语句,因为它会大大提高它的复杂性。
我尝试了不同的方法,但我在 Oracle 上的经验不足 :)
有什么方法可以在不使用 PLSQL 和那些 CASE 的情况下实现这一目标?
【问题讨论】:
【参考方案1】:如果我理解正确,您需要改用outer join
。如果T2.REF
是NULL
,则可以使用COALESCE
返回与“DEF”关联的值:
SELECT T1.CODE,
T2.CODE,
T3.VALUE
FROM TABLE1 T1
LEFT JOIN TABLE2 T2 ON T1.REF = T2.CODE
LEFT JOIN TABLE3 T3 ON COALESCE(T2.REF,'DEF') = T3.CODE
WHERE T1.CODE = XXXXX
【讨论】:
确切:) 非常感谢!!以上是关于Ora SQL 查询:无引用加入的主要内容,如果未能解决你的问题,请参考以下文章
两个子查询单独工作正常但“SQL 命令未正确结束”当加入时除了 [解释说我是五岁]
imp命令导入dmp文件,提示成功无警告,但是在pl sql 查询,提示表不存在,是怎么回事?