程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SyBase數據庫 >> SyBase教程 >> 多表內連接查詢關鍵字不對應時要注意的一個問題

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

編輯:SyBase教程

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


作者: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')

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved