2016-04-12 263 views
0

我現在有兩個表存儲數據。它們通過ID值相關聯。我如何返回表1中的所有值,包括主值,即使匹配。這是我的基本查詢。左連接返回連接值

Select MFG.mfgname, SS.subsysname 
From Manufacturers MFG left join SubSystem SS 
On MFG.id = SS.mfgid 
Order by MFG.mfgname, SS.subsysname 

下面是表

MFG Table  
id mfgname 
1 ABB 
2 Siemens 
3 Vipa  
4 Visolux 

SubSystem table  
id mfgid subsysname 
1 1 ABB Drives 
2 1 ABB Robots 
3 1 Advant OCS 
4 2 Simatic S5 
5 2 Simatic S7 
6 3 Vipa System 

最後的結果和預期的結果。

Results 
mfgname subsysname 
ABB ABB Drives 
ABB ABB Robots 
ABB Advant OCS 
Siemens Simatic S5 
Siemens Simatic S7 
Vipa Vipa System 
Visolux NULL 

Desired Results 
mfgname subsysname 
ABB NULL 
ABB ABB Drives 
ABB ABB Robots 
ABB Advant OCS 
Siemens NULL 
Siemens Simatic S5 
Siemens Simatic S7 
Vipa NULL 
Vipa Vipa System 
Visolux NULL 

期望的結果還會返回帶有空子系統名稱的ABB,西門子和Vipa mfgs。此時它沒有。希望這是有道理的!

回答

2

你應該可以使用UNION來做到這一點。

SELECT MFG.mfgname, 
     SS.subsysname 
FROM Manufacturers MFG 
     LEFT JOIN SubSystem SS ON MFG.id = SS.mfgid 
UNION 
SELECT MFG.mfgname, 
     NULL 
FROM Manufacturers MFG 
ORDER BY MFG.mfgname, 
     SS.subsysname 
+1

如果將'left join'更改爲'inner join'並將'union'更改爲'union all',可以避免需要獨特的排序? –

+2

如果'subsysname'不能爲空,你可以使用inner join和union all – JamieD77