Встроенный просмотр
Возможно, кто-то может помочь с разработкой запроса для удовлетворения этих требований. Мне нужно, чтобы это было частью встроенного представления, которое будет присоединено к большему запросу.
У меня есть базовая таблица адресов электронной почты:
EMAIL
jon@a.com
art@b.com
Тогда у меня есть таблица, которая называется UPLOAD_HISTORY. Пример данных:
EMAIL FILETYPE FILENAME
jon@a.com 1 file1.txt
jon@a.com 2 filex.txt
jon@a.com 4 fileb.txt
Тогда есть таблица типов файлов:
FILE ID FILE TYPE
1 TYPE A
2 TYPE B
3 TYPE C
4 TYPE D
Если я выполню запрос и внешне соединю UPLOAD_HISTORY и FILE_TYPES, я получу что-то вроде этого:
EMAIL FILETYPE FILENAME
jon@a.com 1 file1.txt
jon@a.com 2 filex.txt
3
jon@a.com 4 fileb.txt
Что мне нужно для пропущенной записи, это заполнить пропущенные значения из таблицы UPLOAD_HISTORY. Мой идеальный набор результатов будет выглядеть так:
EMAIL FILETYPE FILENAME STATUS
jon@a.com 1 file1.txt 1
jon@a.com 2 filex.txt 1
jon@a.com 3 0
jon@a.com 4 fileb.txt 1
Я ищу, чтобы получить все типы файлов, электронное письмо для каждой строки и статус 1, если есть запись для этого типа файла, или 0, если нет........
Иногда могут быть пройдены критерии. Я могу попросить конкретный тип файла или нет.
Если в конкретном письме нет записей в таблице UPLOAD_HISTORY, возможно ли получить пустые записи?
EMAIL FILETYPE FILENAME STATUS
jon@a.com 1 file1.txt 1
jon@a.com 2 filex.txt 1
jon@a.com 3 0
jon@a.com 4 fileb.txt 1
art@b.com 1 0
art@b.com 2 0
art@b.com 3 0
art@b.com 4 0
Тем не менее, я мог бы попросить только Тип файла 1:
EMAIL FILETYPE FILENAME STATUS
jon@a.com 1 file1.txt 1
art@b.com 1 0
Спасибо
2 ответа
Используйте CROSS JOIN на email
а также file_type
чтобы получить все комбинации, затем НАЙДИТЕ ВНЕШНЕЕ upload_history
чтобы получить результаты, которые вы хотите.
Предполагая, что в upload_history
для каждой комбинации это должно работать хорошо:
select eft.email
, eft.filetype
, uh.filename
, nvl2(uh.filename, 1, 0) as status
from ( select email, file_id, filetype
from email
cross join file_type ) eft
left outer join upload_history uh
on uh.email = eft.email
and uh.filetype = eft.filetype
order by eft.email
, eft.filetype
Вы не указали, что должно произойти, если в upload_history
для каждой комбинации. Может быть, один ряд на filename
верно. Но цель status
колонка кажется немного избыточной.
Левое объединение типов файлов с историей:
select EMAIL, FILETYPE, FILENAME, nvl(STATUS, 0) as STATUS
from file_type
left join upload_history on FILETYPE = FILE_ID