[英]how to full outer join with 3 tables in sql?
我有 3 张桌子:
表 1 : "vw_dimserver" :[ServerKey,ServerNm,ServerCurrentAssignedToNm] 例如:[1234,hasgapp0108,Aya]
table2 "vw_DimWorker" : [WorkerEmailNm, WorkerIdsid] 。 例如: [Aya, akhate] , [Genna,gshysh] , [mish,mishka] (就像名字和用户名)
表 3 "vw_FactHardwareAssetContact" : [ServerKey,HardwareAssetWorkerKey, HardwareAssetContactTypeNm]。 例如: [1234,Aya,support] [1234,Genna,Customer] [1234,Mish,patch] (它是服务器密钥和联系人姓名和联系人类型,如果是支持或客户或补丁)
我需要输出在一行中:[ServerNm,WorkerIdsid of the ServerCurrentAssignedToNm, WorkerIdsid of the Customer, WorkerIdsid of the support] [hasgapp0108,akhate,gshysh,mishka]
现在我需要加入用户名表来获取每个用户的用户名。 我用全外连接做到了。
代码是:
选择 vw_dimserver.ServerNm 作为主机名,(vw_DimWorker1.WorkerIdsid) 作为用户名,(vw_DimWorker2.WorkerIdsid) 作为 [主要支持联系人],(vw_DimWorker3.WorkerIdsid) 作为 [主要客户联系人]
from vw_dimserver
inner join vw_FactHardwareAssetContact on vw_dimserver.ServerKey = vw_FactHardwareAssetContact.HardwareAssetKey
inner join vw_DimWorker as vw_DimWorker1 on vw_DimWorker1.WorkerEmailNm = vw_dimserver.ServerCurrentAssignedToNm
full outer join vw_DimWorker as vw_DimWorker2 on CONVERT(varchar(11),vw_FactHardwareAssetContact.HardwareAssetWorkerKey ) = vw_DimWorker2.workerWWID and vw_FactHardwareAssetContact.HardwareAssetContactTypeNm = 'Support' and vw_FactHardwareAssetContact.HardwareAssetPrimaryInd = '1' and( vw_FactHardwareAssetContact.HardwareAssetWorkerKey is not NULL)
full outer join vw_DimWorker as vw_DimWorker3 on CONVERT(varchar(11),vw_FactHardwareAssetContact.HardwareAssetWorkerKey ) = vw_DimWorker3.workerWWID and vw_FactHardwareAssetContact.HardwareAssetContactTypeNm = 'Customer' and vw_FactHardwareAssetContact.HardwareAssetPrimaryInd = '1' and( vw_FactHardwareAssetContact.HardwareAssetWorkerKey is not NULL)
where vw_dimserver.ServerNm ='hasgapp0108' and (vw_DimWorker2.workerWWID is not null or vw_DimWorker3.workerWWID is not null ) and ( ServerCurrentSubStatusCd != 'duplicate_error' or ServerCurrentSubStatusCd is NULL )
输出是两行:
[主机名用户名支持客户]
[hasgapp0108 akhate NULL gshysh],
[hasgapp0108 akhate akhate NULL]
我需要它是一行:
[主机名用户名支持客户]
[hasgapp0108 akhate akhate gshysh]
我的经理不接受解决方案:
select max(username1),max(username2)...
我需要用连接来做。
用内连接和 group_concat 试试这个:
SELECT vw_dimserver.ServerNm as hostname , group_concat(vw_DimWorker1.WorkerIdsid) as username, group_concat(vw_DimWorker2.WorkerIdsid) as [Primary Support Contact], group_concat(vw_DimWorker3.WorkerIdsid) as [Primary Customer Contact]
from vw_dimserver
inner join vw_FactHardwareAssetContact on vw_dimserver.ServerKey = vw_FactHardwareAssetContact.HardwareAssetKey
inner join vw_DimWorker as vw_DimWorker1 on vw_DimWorker1.WorkerEmailNm = vw_dimserver.ServerCurrentAssignedToNm
full outer join vw_DimWorker as vw_DimWorker2 on CONVERT(varchar(11),vw_FactHardwareAssetContact.HardwareAssetWorkerKey ) = vw_DimWorker2.workerWWID and vw_FactHardwareAssetContact.HardwareAssetContactTypeNm = 'Support' and vw_FactHardwareAssetContact.HardwareAssetPrimaryInd = '1' and( vw_FactHardwareAssetContact.HardwareAssetWorkerKey is not NULL)
full outer join vw_DimWorker as vw_DimWorker3 on CONVERT(varchar(11),vw_FactHardwareAssetContact.HardwareAssetWorkerKey ) = vw_DimWorker3.workerWWID and vw_FactHardwareAssetContact.HardwareAssetContactTypeNm = 'Customer' and vw_FactHardwareAssetContact.HardwareAssetPrimaryInd = '1' and( vw_FactHardwareAssetContact.HardwareAssetWorkerKey is not NULL)
where vw_dimserver.ServerNm ='hasgapp0108' and (vw_DimWorker2.workerWWID is not null or vw_DimWorker3.worker
group by vw_dimserver.ServerNm
如果您只需要匹配结果,则可以使用内部联接
SELECT
s.ServerKey,
s.ServerNm,
group_concat(w.WorkerIdsid)
FROM vw_dimserver s
INNER JOIN vw_FactHardwareAssetContact c
ON s.ServerKey = c.ServerKey
INNER JOIN vw_DimWorker w
ON c.HardwareAssetWorkerKey = w.WorkerEmailNm
GROUP BY s.ServerKey,
s.ServerNm
或者如果没有全部匹配,您可以使用左连接
SELECT
s.ServerKey,
s.ServerNm,
group_concat(w.WorkerIdsid)
FROM vw_dimserver s
LEFT JOIN vw_FactHardwareAssetContact c
ON s.ServerKey = c.ServerKey
LEFT JOIN vw_DimWorker w
ON c.HardwareAssetWorkerKey = w.WorkerEmailNm
GROUP BY s.ServerKey,
s.ServerNm
选择 vw_dimserver.ServerNm 作为主机名,(vw_DimWorker1.WorkerIdsid) 作为用户名,(vw_DimWorker2.WorkerIdsid) 作为 [主要支持联系人],(vw_DimWorker3.WorkerIdsid) 作为 [主要客户联系人]
来自 vw_dimserver
全外连接 vw_FactHardwareAssetContact as vw_FactHardwareAssetContact1 on (vw_dimserver.ServerKey = vw_FactHardwareAssetContact1.HardwareAssetKey 和 vw_FactHardwareAssetContact1.HardwareAssetContactTypeNm = 'SupportHardwAssetInact')
在 CONVERT(varchar(11),vw_FactHardwareAssetContact1.HardwareAssetWorkerKey) = vw_DimWorker1.workerWWID 上完全外连接 vw_DimWorker 作为 vw_DimWorker1
全外连接 vw_DimWorker 作为 assings on assings.WorkerEmailNm = vw_dimserver.ServerCurrentAssignedToNm
全外连接 vw_FactHardwareAssetContact as vw_FactHardwareAssetContact2 on (vw_dimserver.ServerKey = vw_FactHardwareAssetContact2.HardwareAssetKey and vw_FactHardwareAssetContact2.HardwareAssetContactTypeNm = 'CustomardContactTypeNm = 'CustomardContactTypeNm = 'CustomardContaryAst')
在 CONVERT(varchar(11),vw_FactHardwareAssetContact2.HardwareAssetWorkerKey) = vw_DimWorker2.workerWWID 上完全外连接 vw_DimWorker 作为 vw_DimWorker2
完整的 OUTER 加入 vw_FactHardwareAssetContact as vw_FactHardwareAssetContact11 on (vw_dimserver.ServerKey = vw_FactHardwareAssetContact11.HardwareAssetKey 和 vw_FactHardwareAssetContact11.HardwareAssetContactSupportTypeNardwAsset'vw_FactHardwareAssetContact11'和 vw_FactHardwareAssetContact11'vw_FactHardwareAssetContact11.HardwareAssetKey'and'
在 CONVERT(varchar(11),vw_FactHardwareAssetContact11.HardwareAssetWorkerKey) = vw_DimWorker11.workerWWID 上完全外连接 vw_DimWorker 作为 vw_DimWorker11
完整的 OUTER 加入 vw_FactHardwareAssetContact as vw_FactHardwareAssetContact22 on (vw_dimserver.ServerKey = vw_FactHardwareAssetContact22.HardwareAssetKey 和 vw_FactHardwareAssetContact22.HardwareAssetContactTypeFardws1'和 vw_FactHardwareAssetContact22 = vw_FactHardwareAssetContact22.HardwareAssetKey 和 vw_FactHardwareAssetContact22.HardwareAssetContactTypeNm)和
在 CONVERT(varchar(11),vw_FactHardwareAssetContact22.HardwareAssetWorkerKey) = vw_DimWorker22.workerWWID 上完全外连接 vw_DimWorker 作为 vw_DimWorker22
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.