Мне нужна помощь в уточнении условия 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
, так как он уже был обработан.
Мой текущий запрос имеетСледующее условие WHERE:
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
и помечать его как Обработанное, как только оно попадет в третье вложение, отправленное на сервер.
Заранее благодарю за помощь!