我正在尝试根据修订号从各种表中提取数据,我只希望在主表中看到小于最小转速的值,如果修订号不匹配或不匹配我仍然希望看到空。
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。
答案 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;