2016-02-03 50 views
1

我想從兩個表使用內部連接的結果,這個工程。 但是還有第三個加入,這是原來的表,所以我用了一個別名,如表3(T3)SQL內部加入 - 不返回所有記錄

但有些結果未返回,當T3加入爲零,它不會返回任何結果。

我該如何解決這個問題,即使第三次連接沒有返回任何結果,我也需要該記錄。

select 
'ID' = T1.ID, 
'Code' = T1.NOMCode, 
'Account Name' = T1.NOMName, 
'Group Code' = T1.NOMGroup, 
'Group Name' = T2.NOMAccountGroup, 
'Combine Code' = T1.NOMCombinedCode, 
'Combine Name' = T3.NOMName, 
'Comments' = T1.NOMComments 
from PARAM_NOMINALCODES T1 
inner join PARAM_NOMINALACCOUNTGROUPS T2 
on T1.NOMGroup = T2.ID 
inner join PARAM_NOMINALCODES T3 
on T3.nomcode = T1.nomcombinedcode 
where T1.NOMName <> 'Spare' and T1.NOMName <> 'Inactive' 
+0

Mike你究竟想要達到什麼目的?哪些記錄應該始終返回,哪些只有匹配? – sagi

+1

這是無效的(標準)SQL,您正在使用哪些DBMS? –

回答

1

然後,你必須使用LEFT JOIN而不是INNER JOIN這樣的:

select 
'ID' = T1.ID, 
'Code' = T1.NOMCode, 
'Account Name' = T1.NOMName, 
'Group Code' = T1.NOMGroup, 
'Group Name' = T2.NOMAccountGroup, 
'Combine Code' = T1.NOMCombinedCode, 
'Combine Name' = T3.NOMName, 
'Comments' = T1.NOMComments 
from PARAM_NOMINALCODES T1 
inner join PARAM_NOMINALACCOUNTGROUPS T2 
on T1.NOMGroup = T2.ID 
LEFT JOIN PARAM_NOMINALCODES T3 
on T3.nomcode = T1.nomcombinedcode 
where T1.NOMName NOT IN('Spare','Inactive') 

BTW,而不是兩個條件使用NOT IN來比較兩個或多個值

INNER JOIN手段只有回答ON編碼的記錄纔會被返回,其他所有內容都將被過濾。

LEFT JOIN指(位置)左表將返回所有的記錄和右表將只返回回答情況

+0

非常感謝您的支持,但在發佈我的問題之前我確實嘗試過,結果完全相同。 –

+1

@MikeM沒有任何意義..嘗試將第一個內部連接切換爲左連接?試着更好地解釋你想要的結果,全部來自t1以及與t2,t3相匹配的所有內容?還是全部?或?.. – sagi

+0

@ sagi的答案是你描述的問題的正確答案。如果它仍然不起作用,那麼還有其他問題。 –

1

在T3改變你inner joinleft join應該解決您的問題的記錄。

編輯:其實,你可以嘗試使用T3作爲你正在選擇的表格,並將其他兩個表格連接到它嗎?像這樣:

select 
'ID' = T1.ID, 
'Code' = T1.NOMCode, 
'Account Name' = T1.NOMName, 
'Group Code' = T1.NOMGroup, 
'Group Name' = T2.NOMAccountGroup, 
'Combine Code' = T1.NOMCombinedCode, 
'Combine Name' = T3.NOMName, 
'Comments' = T1.NOMComments 
from PARAM_NOMINALCODES T3 
left join PARAM_NOMINALCODES T1 
on T3.nomcode = T1.nomcombinedcode 
left join PARAM_NOMINALACCOUNTGROUPS T2 
on T3.nomvode = T2.ID 
where T1.NOMName <> 'Spare' and T1.NOMName <> 'Inactive' 
+0

謝謝,但結果是相同的唱內或左加入 –

+0

@MikeM你可以嘗試在聲明中使用T3並將所有內容都加入到它嗎? –