Поиск отсутсвующих данных ORACLE

Рейтинг: 1Ответов: 1Опубликовано: 27.01.2023

Из двух таблиц производится выборка.

В результате мы получаем некоторый результат НАЙДЕННЫХ данных.

Названия и количество столбцов в таблицах - одинаковое:

-username

-number

-start_date

В t1 к каждый номер имеет по 10-15 строк, в t2 - тысячи.

Из t1 мы берем каждую строку из столбца start_date и ищем ВСЕ данные из t2, попадающие в радиус +30 минут и -30 минут от этой даты из t1.

Суть в том, что результат выдает только найденные строки из t2, а может быть такое, что в этот радиус не входит ни одна строк из t1, тогда нужно вывести эту дату из t1 на экран и показать NULL значение из t2.

Как вывести и те даты из t1, которые не попали в этот радиус +- 30 минут из t2?

SELECT t1.username,
       t1.number,
       t1.start_date,
      ,listagg(to_char(t2.date_time, 'DD/MM/YYYY HH:MI:SS'), '; ') within group (order by t2.date_time) list_date
FROM table1 t1, table2 t2
WHERE t1.number='5646523' and t1.number=t2.number and t2.date_time BETWEEN (t1.date_time - (1/24/2)) and (t1.date_time + (1/24/2))
GROUP BY t1.username, t1.number, t1.start_date

Ответы

▲ 2Принят

Используйте LEFT JOIN

SELECT t1.username,
       t1.number,
       t1.start_date,
       listagg(to_char(t2.date_time, 'DD/MM/YYYY HH:MI:SS'), '; ') within group (order by t2.date_time) list_date
FROM table1 t1 
LEFT JOIN table2 t2 on t1.number=t2.number and t2.date_time BETWEEN (t1.date_time - (1/24/2)) and (t1.date_time + (1/24/2))
WHERE t1.number='5646523'
GROUP BY t1.username, t1.number, t1.start_date