将ORACLE查询中的WHERE条件优化为暂存表



我正在寻求一些帮助,以便将SQL查询中的WHERE条件细化为一组链接的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

第二个表用于附件数据,包含链接到案例数据的文件附件的元数据。此表上的每个案例可能有多个记录。如果生成的文件传输到服务器,则此表上有一个标志列将附件标记为"已发送"。附件_图纸_表格

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条件,其中我只拉入案例尚未处理的案例记录,并且所有附件记录在ATTACHMENT_SENT_FLAG列中都包含YNULL(如果案例记录不包含附件,则会出现NULL(。如果附件暂存表中的任何一条相关记录的ATTACHMENT_SENT_FLAG列中有N,我不希望该案例记录出现在查询结果中。

在这种情况下:

  • 案例编号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,并在它到达发送到服务器的第三个附件时将其标记为已处理。

提前感谢您的帮助!

筛选具有ATTACHMENT_SENT_FLAG = 'N'attachment_staging_table记录,如下所示:

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'
)

相关内容

  • 没有找到相关文章

最新更新