我试图通过使用简单的查询和感觉坚持在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?
如果我理解正确,你需要使用一个outer join代替.然后,您可以使用COALESCE返回与"DEF"关联的值,如果T2.REF是 NULL:
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)