У меня есть 2 таблицы: задания и экспатрианты. У заданий есть их effective_start_date и effective_end_date. Мне нужно показать информацию о назначениях сотрудников и датах, когда они отправились в другую страну (во время назначений). У меня есть оператор select, который позже будет загружать данные в таблицу. Но в таблице есть ограничение, что сочетание assign_id, effective_start_date, effective_end_date должно быть уникальным. А в таблице expatriates у меня нет assign_id. Поэтому я не могу, кажется, присоединиться к 2 таблицам правильно. Я также не могу использовать first_value и отличный, должно быть другое решение.SQL присоединяется только к одному значению при перекрытии дат
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
Edit: забыл упомянуть, что я не могу использовать оператор ИЛИ, потому что присоединяется мне нужно сделать, на самом деле внешние соединения, и я не могу использовать объединение все, чтобы исправить эту проблему. Я использовал внутренние соединения только для примера.
Редактировать nr. 2: до сих пор нет решения для этого?
Какого результата вы хотите (для ваших Пример данных)? Мне кажется, что ваш запрос в порядке. –