将ORACLE查询上的WHERE条件细化到暂存表
我正在寻找一些帮助,将SQL查询中的将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
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'
)
非常感谢您快速简洁的回复!我今天早上测试了它,效果非常好!