如何将不匹配返回为空值

时间:2017-10-12 18:51:50

标签: sql oracle

我正在尝试根据修订号从各种表中提取数据,我只希望在主表中看到小于最小转速的值,如果修订号不匹配或不匹配我仍然希望看到空。

T1
Id  t1_Value Rev
1    ABC  123
2    XYZ  234
3    RTY  344
4    MGH  678

T2 
T2Id t1_Id(FK) t2_Value   Rev
1    1        ab12    121
2    1        qw12    122
3    2        rf45    234
4    3        ty67    345


Output:
Id   T1_Value  T2_Value
1    ABC        ab12
1    ABC        qw12
2    XYZ        rf45
3    RTY
4    MGH

这是我的查询的一部分:

select t1.id, t1.value as t1_value, t2.value as t2_value
from t1, t2
where t1.id=t2.t1_id(+)
and nvl(t2.rev,-1)<=t1.rev

如果我使用nvl,它将返回#1,2,4。但我无法确定如何返回#3,我当前的查询正在丢弃#3,所以我根本没有看到#3行。在看到几个响应之后,我想补充一点,我的数据是跨多个表的,我需要对至少10个表执行该修订检查&lt; = t1.rev。

2 个答案:

答案 0 :(得分:0)

如果您使用ANSI(SQL标准)语法进行外连接,那么您会做得更好。

使用您所使用的旧的,已弃用的,不推荐的专有Oracle语法,NVL不是您所需要的。

相反,在第二个表中发生任何ANYTHING之后你需要(+)表示法 - 不仅仅是t2.t1_id(+)中的一次,而是在第二个条件中:

and t2.rev(+) <= t1.rev

答案 1 :(得分:0)

我相信你想要:

select t1.id, t1.value as t1_value, t2.value as t2_value
from t1 left join
     t2
     on t1.id = t2.t1_id and t2.rev <= t1.rev;