Уточните условие WHERE в запросе ORACLE для промежуточных таблиц
Я ищу некоторую помощь с уточнением WHERE
условие SQL-запроса к набору связанных промежуточных таблиц данных Oracle.
Одна таблица предназначена для данных случая, содержащих метаданные о записи. В этой таблице есть только одна запись для каждого случая. В этой таблице есть столбец флага, который помечает данные дела как Processed
как только данные прочитаны и отправлены в другую базу данных. case_staging_table
CASE_NUMBER CASE_DETAILS PARENT_ID_NUMBER PROCESSED_FLAG
0001 First Case X0001 NULL
0002 Second Case X0002 NULL
0003 Third Case X0003 Processed
Вторая таблица предназначена для данных вложений и содержит метаданные о вложениях файлов, которые связаны с данными дела. Возможно, в этой таблице несколько записей для каждого случая. В этой таблице есть столбец флага, который помечает вложение как Отправленное, если полученный файл передается на сервер. attachment_staging_table
ID_NUMBER PARENT_ID_NUMBER ATTACHMENT_NAME ATTACHMENT_SENT_FLAG
A0001 X0001 First Case Attachment 1.docx N
A0002 X0001 First Case Attachment 2.docx N
A0003 X0001 First Case Attachment 3.docx Y
A0004 X0003 Third Case Attachment.docx Y
Что мне нужно сделать, это построить WHERE
условие запроса, при котором я извлекаю только записи дел, в которых дело НЕ было обработано, а ВСЕ записи вложений содержат Y
или NULL
в ATTACHMENT_SENT_FLAG
столбец (а NULL
будет присутствовать, если запись дела не содержит вложений). Если какая-либо из связанных записей в промежуточной таблице вложений имеет N
в ATTACHMENT_SENT_FLAG
столбец, я не хочу, чтобы запись о делах появлялась в результатах запроса.
В этом сценарии:
- Номер дела
0001
не был обработан, имеет три вложения, связанные с ним, и только одно из вложений было отправлено на сервер. - Номер дела
0002
не был обработан и не имеет вложений, связанных с ним. - Номер дела
0003
уже был обработан.
Результаты запроса на этом этапе должны включать только номер дела 0002
, так как он не был обработан и не должен ждать никаких вложений. Результаты запроса не должны содержать номер дела 0001
, поскольку два вложения еще не готовы и не должны содержать номер дела 0003
, как это уже было обработано.
Мой текущий запрос имеет следующее условие ГДЕ:
SELECT
case.staging_table.CASE_NUMBER,
case_staging_table.CASE_DETAILS,
attachment_staging_table.ATTACHMENT_NAME
FROM
case_staging_table
LEFT JOIN attachment_staging_table
ON case_staging_table.PARENT-ID = attachment_staging_table.PARENT_ID
WHERE
case_staging_table.PROCESSED_FLAG IS NULL
AND (
attachment_staging_table.ATTACHMENT_SENT_FLAG = ‘Y’
OR attachment_staging_table.ATTACHMENT_SENT_FLAG IS NULL
)
это WHERE
однако условие все равно будет обрабатывать номер дела 0001
и пометить его как Обработанный, как только оно попадет в третье вложение, отправленное на сервер.
Заранее спасибо за вашу помощь!
1 ответ
Фильтр attachment_staging_table
записи, которые имеют ATTACHMENT_SENT_FLAG = 'N'
, как это:
SELECT
case_staging_table.CASE_NUMBER,
case_staging_table.CASE_DETAILS,
attachment_staging_table.ATTACHMENT_NAME
FROM
case_staging_table
LEFT JOIN attachment_staging_table
ON case_staging_table.PARENT_ID_NUMBER = attachment_staging_table.PARENT_ID_NUMBER
WHERE
case_staging_table.PROCESSED_FLAG IS NULL
AND case_staging_table.PARENT_ID_NUMBER not in
( select x.PARENT_ID_NUMBER
from attachment_staging_table x
where x.ATTACHMENT_SENT_FLAG = 'N'
)