1

我有两个表:table1带字段c1dt(可为空);table2与字段start_dt,end_dtwk_id。现在我需要在 and 之间执行左外连接,table1table2使wk_id介于dtandstart_dt之间end_dt。我应用了以下条件,但有些wk_id不应该NULL被拉出NULL,有些行被重复。

where nvl(t1.dt,'x') between nvl(t2.start_dt(+), 'x') and nvl(t2.end_dt(+), 'x');

条件有什么问题?

4

2 回答 2

1
select *
from table1 t1
left join table2 t2
    on t1.dt between t2.start_dt and t2.end_dt

我建议您尝试新的 ANSI 连接语法。

另外,您只是'x'用作示例吗?还是这些dt列真的存储为字符串?

于 2012-08-31T05:53:10.233 回答
0

您似乎缺少“ table1 left outer join table2 on table1.some_field = table2.some_field ”部分

像这样的东西:

select t1.c1, t1.dt, t2.start_dt, t2.end_dt, t2.wk_id
from table1 t1 left outer join table2 t2
on t1.some_field1 = t2.some_field1
where nvl(t1.dt,'x') 
between nvl(t2.start_dt, 'x') and 
nvl(t2.end_dt, 'x')
于 2012-08-31T04:22:30.003 回答