将ORACLE查询上的WHERE条件细化到暂存表

将ORACLE查询上的WHERE条件细化到暂存表,oracle,where-clause,linked-tables,Oracle,Where Clause,Linked Tables,我正在寻找一些帮助,将SQL查询中的WHERE条件细化为一组链接的Oracle数据暂存表 一个表用于案例数据,包含关于记录的元数据。此表上每个案例只有一条记录。此表上有一个标志列,一旦数据被读取并发送到另一个数据库,它将案例数据标记为已处理。 病例分期表 CASE_NUMBER CASE_DETAILS PARENT_ID_NUMBER PROCESSED_FLAG 0001 First Case X0001 NULL 0002 Second

我正在寻找一些帮助,将SQL查询中的
WHERE
条件细化为一组链接的Oracle数据暂存表

一个表用于案例数据,包含关于记录的元数据。此表上每个案例只有一条记录。此表上有一个标志列,一旦数据被读取并发送到另一个数据库,它将案例数据标记为已处理。 病例分期表

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
第二个表用于附件数据,其中包含有关链接到案例数据的文件附件的元数据。此表上每个案例可能有多条记录。如果生成的文件被传输到服务器,则此表中有一个标志列将附件标记为已发送。 附件(登台)表格

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
条件,在这个条件下,我只提取案例未被处理的案例记录,并且所有附件记录在
附件发送标志
列中都包含一个
Y
或一个
NULL
(如果案例记录不包含附件,则会出现一个
NULL
)。如果附件暂存表中的任何一个相关记录在
attachment\u SENT\u FLAG
列中有一个
N
,我不希望案例记录出现在查询结果中

在这种情况下:

  • 案例编号
    0001
    尚未处理,有三个附件与之关联,并且只有一个附件已发送到服务器
  • 案例编号
    0002
    尚未处理,并且没有与之关联的附件
  • 案件编号
    0003
    已处理
此阶段的查询结果应仅包括案例编号
0002
,因为它尚未处理且无需等待任何附件。查询结果不应包含案例编号
0001
,因为其中两个附件尚未准备好,也不应包含案例编号
0003
,因为它具有alr已经处理过了

我的当前查询具有以下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
    )
但是,此
其中
条件仍将处理案例编号
0001
,并在其到达发送到服务器的第三个附件时将其标记为已处理


提前感谢您的帮助!

筛选
附件\u暂存\u表
已发送
附件\u标志='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'
            )

非常感谢您快速简洁的回复!我今天早上测试了它,效果非常好!