У меня есть три разные таблицы, одна из которых содержит информацию о папке, одна - информацию о документе, а другая - информацию электронной почты. Я хочу выбрать данные из всех трех таблиц одновременно в запросе SELECT.
ТАБЛИЦА 1 (информация о папке):
CASE_ID | FOLDER_ID | PARENT_FOLDER_ID | FOLDER_NAME
123 C488785 null casefolder 1
123 F488785 C488785 folder 1
123 SF48878 F488785 subfolder 1
ТАБЛИЦА 2 (информация о документе):
CASE_ID | FOLDER_ID | DOCUMENT_ID | DOCUMENT_NAME | DOCUMENT_TYPE | IS_VISIBLE | ...
C488785 | SF488785 | d98765432 | document 1 | txt | 1 | ...
ТАБЛИЦА 3 (информация по электронной почте):
CASE_ID | FOLDER_ID | EMAIL_ID | SUBJECT | SENDER | IS_VISIBLE | ...
C488785 | SF48878 | d12345678 | test mail | sender@sender.nl | 0 | ...
C488785 | F488785 | d67891234 | test mail2 | sender@sender.nl | 0 | ...
См. Ниже оператор SQL, который я пробовал и который дает ожидаемый результат. Однако я не хочу включать это СО там. Я предпочитаю не использовать это СО.
WITH folder_information AS (
SELECT T1.CASE_ID, T1.FOLDER_ID, T1.PARENT_FOLDER_ID, T1.FOLDER_NAME, T2.FOLDER_NAME "PARENT_FOLDER_NAME"
FROM DB.FOLDER_DATA T1 LEFT JOIN DB.FOLDER_DATA T2
ON (T1.PARENT_FOLDER_ID = T2.FOLDER_ID)
WHERE T1.CASE_ID=12345),
files AS(
SELECT CASE_ID, DOSSIER_ID, FOLDER_ID, DOCUMENT_ID, DOCUMENT_NAME, DOCUMENT_TYPE, UPLOADED_BY, UPLOADED_ON, MODIFIED_BY, MODIFIED_ON, VERSION, IS_VISIBLE, IS_CHECKEDOUT, CHECKEDOUT_BY,
NULL AS "EMAIL_ID", NULL AS "SUBJECT", NULL AS "SENDER", NULL AS "RECIPIENT", NULL AS "RECEIVED_DATE", NULL AS "ATTACHMENTS"
FROM DB.DOCUMENT_DATA WHERE CASE_ID=12345
UNION
SELECT CASE_ID, DOSSIER_ID, FOLDER_ID, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, IS_VISIBLE, NULL, NULL, EMAIL_ID, SUBJECT, SENDER, RECIPIENT, RECEIVED_DATE, ATTACHMENTS
FROM DB.EMAIL_DATA WHERE CASE_ID=12345)
SELECT T1.CASE_ID, T1.DOSSIER_ID, T1.FOLDER_ID, T1.DOCUMENT_ID, T1.DOCUMENT_NAME, T1.DOCUMENT_TYPE, T1.UPLOADED_BY, T1.UPLOADED_ON, T1.MODIFIED_BY, T1.MODIFIED_ON, T1.VERSION, T1.IS_VISIBLE, T1.IS_CHECKEDOUT, T1.CHECKEDOUT_BY,
T1.EMAIL_ID, T1.SUBJECT, T1.SENDER, T1.RECIPIENT, T1.RECEIVED_DATE, T1.ATTACHMENTS ,T2.FOLDER_NAME, T2.PARENT_FOLDER_NAME
FROM files T1, folder_information T2
WHERE T1.CASE_ID = T2.CASE_ID AND T1.FOLDER_ID = T2.FOLDER_ID
Приведенный выше код приводит к следующему, и я ожидаю, что результат будет следующим:
RESULT TABLE 1 (folder information):
CASE_ID | FOLDER_ID | DOCUMENT_ID | DOCUMENT_NAME | ... | EMAIL_ID | SUBJECT | ... | FOLDER_NAME | PARENT_FOLDER_NAME
C488785 | SF48878 | d98765432 | document 1 | ... | null | null | ... | subfolder 1 | folder 1
C488785 | SF48878 | null | null | ... | d12345678 | test mail | ... | subfolder 1 | folder 1
C488785 | F488785 | null | null | ... | d67891234 | test mail2 | ... | folder 1 | casefolder 1
ЗАМЕЧАНИЕ: Для удобства чтения я заменил некоторые столбцы по точкам (...)