Sql 左连接返回连接值
我现在有两个存储数据的表。它们由一个ID值关联。如何返回表1中的所有值,包括主值,即使它具有匹配项。这是我的基本问题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
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
不可为空,则可以使用内部连接和联合所有