【发布时间】:2015-08-17 07:56:30
【问题描述】:
我有 2 张桌子:分配和外籍人士。作业有其 Effective_start_date 和 Effective_end_date。我需要显示有关员工分配的信息以及他们前往另一个国家/地区的日期(在分配日期期间)。我有一个 select 语句,稍后会将数据加载到表中。但是该表有一个约束,即 assignment_id、effective_start_date、effective_end_date 的组合必须是唯一的。在外籍人士表上,我没有 assignment_id。因此,我似乎无法正确加入 2 张桌子。我也不能使用 first_value 和 distinct,必须有另一个解决方案。
with assignments (assignment_id, person_id, effective_start_date, effective_end_date) as (
select 148713, 123, date '2015-03-16', date '4712-12-31' from dual union all
select 13706, 123, date '2015-03-16', date '4712-12-31' from dual union all
select 13706, 123, date '2015-01-01', date '2015-03-15' from dual
),
expatriates (person_id, date_from, date_to, home_country, host_country, valid_from, valid_to) as (
select 123, date '2015-03-16', date '2016-04-15', 'TEST', 'TEST', date '2015-03-16', date'2015-04-15' from dual union all
select 123, date '2015-01-01', date '2015-03-15', 'TEST2', 'TEST2', date '2015-01-01', date'2015-03-15' from dual union all
select 123, date '2014-04-16', date '2016-06-15', 'TEST1', 'TEST1', date '2015-04-16', date'2016-06-15' from dual
)
select
a.assignment_id,
a.person_id,
a.effective_start_date,
a.effective_end_date,
subq.date_from,
subq.date_to,
subq.home_country,
subq.host_country
from expatriates subq, assignments a
where
subq.person_id=a.person_id
and subq.valid_from <= a.effective_end_date
and subq.valid_to >= a.effective_start_date
编辑:忘了提到我不能使用 OR 语句,因为我需要进行的连接实际上是外连接,我不能使用 union all 来解决问题。我只是为了示例使用了内部连接。
编辑编号。 2:还是没有解决办法?
【问题讨论】:
-
您想要什么结果(对于您的样本数据)?对我来说,您的查询似乎很好。