Sql 左连接返回连接值

Sql 左连接返回连接值,sql,sql-server,Sql,Sql Server,我现在有两个存储数据的表。它们由一个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 S

我现在有两个存储数据的表。它们由一个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 MFG,子系统名称为空。在这一点上它没有。希望这有意义

您应该能够使用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

您应该能够使用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

如果您将
左连接
更改为
内部连接
,将
联合
更改为
联合所有
,从而避免了对不同排序的需要,这是否会执行得更好一些?如果
subsysname
不可为空,如果将
左连接
更改为
内部连接
,将
联合
更改为
联合所有
,则可以使用内部连接和联合所有,从而避免使用不同的排序。如果
subsysname
不可为空,则可以使用内部连接和联合所有