多表內串連查詢關鍵字不對應時要注意的一個問題,關鍵字應時

來源:互聯網
上載者:User

多表內串連查詢關鍵字不對應時要注意的一個問題,關鍵字應時

作者:iamlaosong

多表串連查詢中最常用的事內串連,內串連中最常用的是等值串連,即在串連條件中使用等號(=)運算子比較被串連列的列值,其查詢結果中列出被串連表中的所有列,包括其中的重複列。例如:

select *  from tb_evt_mail_clct a, tb_evt_dlv c
 where a.clct_date between to_date('2015-6-11', 'yyyy-mm-dd') and
       to_date('2015-6-11', 'yyyy-mm-dd')
   and a.mail_num=c.mail_num;

上述查詢中,A表(收寄表)和C表(投遞表)中的郵件號碼mail_num不一定是一一對應的,有可能A表中存在的,C表中不存在,按上面的語句查詢,這些郵件將不會出現,如果需要出現,我們一般在等式的右邊添加一個“(+)”,這樣就可以列出A表中的所有內容,如下所示:

select *  from tb_evt_mail_clct a, tb_evt_dlv c
 where a.clct_date between to_date('2015-6-11', 'yyyy-mm-dd') and
       to_date('2015-6-11', 'yyyy-mm-dd')
   and a.mail_num=c.mail_num(+);

如果我們要統計A表中存在C表中不存在的郵件量(未投遞郵件量),可以用下面語句:

select count(*)  from tb_evt_mail_clct a, tb_evt_dlv c
 where a.clct_date between to_date('2015-6-11', 'yyyy-mm-dd') and
       to_date('2015-6-11', 'yyyy-mm-dd')
   and a.mail_num=c.mail_num(+)

   and c.mail_num is null;

我們可以用下面語句統計妥投郵件量,妥投的條件是c.dlv_sts_code = 'I',即:

select count(*)  from tb_evt_mail_clct a, tb_evt_dlv c
 where a.clct_date between to_date('2015-6-11', 'yyyy-mm-dd') and
       to_date('2015-6-11', 'yyyy-mm-dd')
   and a.mail_num=c.mail_num(+)

   and c.dlv_sts_code = 'I';


但是如果我們需要統計未妥投郵件量,下面語句是不成立的,統計的結果為0:

select count(*)  from tb_evt_mail_clct a, tb_evt_dlv c
 where a.clct_date between to_date('2015-6-11', 'yyyy-mm-dd') and
       to_date('2015-6-11', 'yyyy-mm-dd')
   and a.mail_num=c.mail_num(+)

   and c.dlv_sts_code = 'I'

   and c.mail_num is null;

這是因為,c.mail_num is null這個條件成立時,c.dlv_sts_code 的值也是null,不可能等於‘I',所以,統計的結果為0,也就是說, 當統計C表mail_num為空白的量時,是不能用其它篩選條件的,確實需要統計的話,需要用下面語句:select count(*)  from tb_evt_mail_clct a
 where a.clct_date between to_date('2015-6-11', 'yyyy-mm-dd') and
       to_date('2015-6-11', 'yyyy-mm-dd')
   and not exists (select 1
          from tb_evt_dlv c
         where c.mail_num = a.mail_num
           and c.dlv_sts_code = 'I')

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.