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.REFNULL,则可以使用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 查询,提示表不存在,是怎么回事?

ORA-01843: 不是具有有效 SQL 查询的有效月份

Oracle APEX - 将隐藏的 SQL 查询下载到 CSV

sql 查询 ORA-01843

ORA-00918 从存储过程返回,但它可以在 SQL 页面中执行查询