Ora SQL Query:无需引用即可加入

byl*_*.05 3 sql oracle join

我试图通过使用简单的查询和感觉坚持在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
Run Code Online (Sandbox Code Playgroud)

XXXX = 98的结果

98.2,CCC

每当参数XXXXX为99,98,96,95时,它返回我期望的内容,但我需要的逻辑对97不起作用.

我的要求说,如果我在表2中找不到链接,那么我应该在表3中使用始终DEF并将未链接的值保留为NULL.就像是:

XXXX = 97的结果

97,NULL,AAA

我认为可以通过使用CASE语句以非常"干净"的方式实现,但这是一个示例,其中显示的列数非常少.在我的实际情况中,它非常大......所以我想尽量避免使用CASE语句,因为它会大大增加它的复杂性.

我尝试了不同的方法,但我对Oracle的低经验不能太深入:)

没有使用PLSQL的任何方法来实现这一点既不是CASE?

sge*_*des 5

如果我理解正确,你需要使用一个outer join代替.然后,您可以使用COALESCE返回与"DEF"关联的值,如果T2.REFNULL:

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
Run Code Online (Sandbox Code Playgroud)