2016-04-12 14 views
0

私は現在、データを格納する2つのテーブルを持っています。それらは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 

希望する結果は、サブシステム名がNULLのABB、Siemens、およびVipaのmfgも返されます。この時点ではそうではありません。これが理にかなったことを願って!

答えて

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'を' all union 'に変更すると、これは少し良くなるでしょうか?別のソートの必要はありませんか? –

+2

'subsysname'がヌル可能でない場合、内部結合と共用をすべて使用できます – JamieD77