Получение строк данных за последние 7 дней с помощью sql в Oracle
Борется с запросом, который возвращает строки данных, включая некоторые строки за последние 7 дней. Там много левых столов, и, похоже, я что-то пропустил. вот пример моего кода до сих пор:
select a.a,
b.b,
c.c,
d.d,
e.e,
f.f,
s.start_date,
ack.acknowledge_date,
fin.finish_date,
g.g,
h.h,
i.i
from table_a a,
inner join table_b b on ... = ...,
left join table_c c on ... = ...,
left join table_d d on ... = ... `
И так далее.
Я хотел бы получить строки данных (если таковые имеются!) из столбцов s. start_date, ack.подтверждение_дата и
Плавник.finish_date за последние 7 дней (я предполагаю, что это (sysdate -7)). Однако, если я сделаю следующее:
select a.a,
b.b,
c.c,
...,
...,
...,
from ...
inner join ...
on ... = ...
left join ...
on ... = ...
left join`...
on ... = ...
where s.start_date >= sysdate -7 and
ack.acknowledge_date >= sysdate -7 and
fin.finish_date >= sysdate -7;
Тогда у меня 0 строк в ответ. Но в идеале запрос должен возвращать все строки из всех таблиц, и если какие-либо строки в этих полях дат он должен возвращать их тоже, если нет данных в этих полях дат, то оставьте его пустым, но все остальные строки должны возвращаться как обычно.
2 ответов:
Не ставьте условия
OUTERтаблицы в ПредложениеWHERE, если этоOUTER JOIN. Переместите их в предложениеONвместо этого!LEFT JOIN <...> ON <...> = <...> AND s.start_date >= sysdate -7
Используйте
ORвместоANDWHERE s.start_date >= sysdate -7 OR ack.acknowledge_date >= sysdate -7 OR fin.finish_date >= sysdate -7;
Comments