То, что вы описываете, это left join
, а не full join
- все ежедневные данные с соответствующими значениями за квартал:
select d.id, d.date, d.value as dly_value, q.value as qly_value
from daily d left join
quarterly q
on d.id = q.id and
d.date = q.date and
q.type = 'qly_type'
where d.type = 'dly_type' and
d.id = 1; -- this is suspicious. Doesn't this match only one daily row?
Ваши условия присоединения являются подозрительными.Почему вы присоединяетесь к id
и date
?Интересно, это корень твоей проблемы?Итак, я подозреваю, что вы действительно хотите:
select d.id, d.date, d.value as dly_value, q.value as qly_value
from daily d left join
quarterly q
on d.date = q.date and
q.type = 'qly_type'
where d.type = 'dly_type';
Full join
редко требуется.Если вам это действительно нужно и вы хотите отфильтровать обе таблицы, я рекомендую выполнить фильтрацию в подзапросах:
select d.id, d.date, d.value as dly_value, q.value as qly_value
from (select d.*
from daily d
where d.type = 'dly_type' and
d.id = 1
) d full join
(select q.*
from quarterly q
where q.type = 'qly_type'
) q
on d.id = q.id and
d.date = q.date