0

也许有人可以协助设计查询以满足这些要求。我将需要它成为内联视图的一部分,该视图将加入更大的查询。

我有基本的电子邮件地址表:

EMAIL
jon@a.com
art@b.com

然后我有一个名为 UPLOAD_HISTORY 的表。样本数据:

EMAIL        FILETYPE   FILENAME
jon@a.com    1          file1.txt 
jon@a.com    2          filex.txt 
jon@a.com    4          fileb.txt 

然后是文件类型表:

FILE ID     FILE TYPE
   1         TYPE A
   2         TYPE B
   3         TYPE C
   4         TYPE D

如果我执行查询,并外部加入 UPLOAD_HISTORY 和 FILE_TYPES,我会得到如下信息:

EMAIL     FILETYPE     FILENAME
jon@a.com    1          file1.txt
jon@a.com    2          filex.txt
             3
jon@a.com    4          fileb.txt

我需要的缺失记录是从 UPLOAD_HISTORY 表中填写缺失值。我理想的结果集如下所示:

EMAIL        FILETYPE   FILENAME      STATUS
jon@a.com    1          file1.txt     1
jon@a.com    2          filex.txt     1
jon@a.com    3                        0
jon@a.com    4          fileb.txt     1

我正在寻找所有文件类型,每行的电子邮件,如果有该文件类型的记录,则状态为 1,如果没有,则状态为 0........

有时可能会通过一些标准。我可能会要求特定的文件类型,也可能不会。

如果特定电子邮件在 UPLOAD_HISTORY 表中没有任何条目,是否可以获得空记录?

EMAIL        FILETYPE   FILENAME     STATUS
jon@a.com    1          file1.txt     1
jon@a.com    2          filex.txt     1
jon@a.com    3                        0
jon@a.com    4          fileb.txt     1
art@b.com    1                        0
art@b.com    2                        0
art@b.com    3                        0
art@b.com    4                        0

但是,我可以只要求文件类型 1:

EMAIL     FILETYPE     FILENAME    STATUS
jon@a.com    1          file1.txt     1
art@b.com    1                        0

谢谢

4

2 回答 2

0

从文件类型到历史的左连接:

select EMAIL, FILETYPE, FILENAME, nvl(STATUS, 0) as STATUS
from file_type
left join upload_history on FILETYPE = FILE_ID
于 2018-07-21T23:59:43.600 回答
0

使用 CROSS JOINemailfile_type获得所有组合,然后使用 LEFT OUTER JOINupload_history以获得您想要的结果。

假设upload_history每个组合最多有一个记录,这应该可以很好地工作:

select eft.email
       , eft.filetype
       , uh.filename
       , nvl2(uh.filename, 1, 0) as status
from   ( select email, file_id, filetype
         from email 
         cross join file_type ) eft
left outer join upload_history uh
    on uh.email = eft.email
    and uh.filetype = eft.filetype
order by eft.email
       , eft.filetype

upload_history如果每个组合有多个记录,您还没有指定要发生的事情。也许每行filename是正确的。但该status专栏的目的似乎有点多余。

于 2018-07-22T06:43:45.060 回答