2013-07-23 195 views
0

您好所有我有如下表 -LEFT OUTER JOIN不工作

tr_resource作爲資源 -

Resourceid name 
135021   ABC 

tr_charac作爲chlev -

characid name 
1   CH1 
2   CH2 

tr_characvalue作爲cvlev -

characvalueid characid stringvalue 
cv1    1  XX 
cv2    2  YY 
cv3    2  zz 

tr_resourcecharac作爲rchlev -

resourceid characvalueid 
135021   cv2 

當我運行下面的查詢 -

select 
    res.name, 
    cvlev.stringvalue 
from tr_resource res 
    left outer join tr_resourcecharac rchlev on res.RESOURCEID = rchlev.RESOURCEID 
    inner join tr_characvalue cvlev on rchlev.CHARACVALUEID = cvlev.CHARACVALUEID 
    inner join tr_charac chlev on chlev.CHARACID = cvlev.CHARACID and chlev.NAME = 'CH2' 
where res.resourceid=135021 

我得到的答案 -

name stringvalue 
ABC  YY 

但是當我運行下面的查詢,我沒有得到任何答案 -

select 
    res.name, 
    cvlev.stringvalue 
from tr_resource res 
    left outer join tr_resourcecharac rchlev on res.RESOURCEID = rchlev.RESOURCEID 
    inner join tr_characvalue cvlev on rchlev.CHARACVALUEID = cvlev.CHARACVALUEID 
    inner join tr_charac chlev on chlev.CHARACID = cvlev.CHARACID and chlev.NAME = 'CH1' 
where res.resourceid=135021 

我想獲得回答r as -

name stringvalue 
ABC  null 

您能否幫忙?

回答

1

您必須將所有內連接更改爲左外連接。

+0

嗨Raniendu感謝您的回覆,但用左外連接代替內連接沒有工作 – anidesh

0

這並不能解釋爲什麼第一個查詢工作,但根據你已經證明我不認爲數據的連接:

chlev.CHARACID = cvlev.CHARACID 

應該工作和chlev是tr_charac的別名並且表中的CHARACID是1和2,而cvlev是tr_characvalue的別名,而CHARACID在這裏是ch1,ch2 & ch2。

UPDATE

感謝您的澄清。我認爲問題是與線下:

inner join tr_characvalue cvlev on rchlev.CHARACVALUEID = cvlev.CHARACVALUEID 

您正在試圖連接這兩個表上CHARACVALUEID,但在tr_resourcecharac唯一CHARACVALUEID是CV2,因此這隻能找到在tr_characvalue的CV2行。 tr_characvalue加入到characid上的tr_charac,因此只能找到CH2行。隨着您的查詢過濾到chlev.NAME ='CH1'no返回結果。

問題是,對於你所擁有的數據,你不能從tr_resource連接到tr_characvalue(甚至使用帶有外連接的其他表),因爲它們之間的唯一鏈接是tr_resourcecharac中的數據,它目前只有一條記錄CV2。

+0

對不起克里斯是錯字錯誤 – anidesh

+0

@anidesh我已經更新了上面的答案。恐怕你的表格不包含所有你想要創建的連接所需的數據。 – ChrisProsser