Mysql 如何在sql中与3个表进行完全外部联接?
我有三张桌子: 表1:“vw_dimserver”:[ServerKey,ServerNm,ServerCurrentAssignedToNm]例如:[1234,hasgapp0108,Aya] 表2“vw_DimWorker”:[WorkerEmailNm,WorkerIdsid]。例如:[Aya,akhate],[Genna,gshysh],[mish,mishka](就像名字和用户名一样) 表3“vw_FactHardwareAssetContact”:[ServerKey,HardwareAssetWorkerKey,HardwareAssetContactTypeNm]。例如:[1234,Aya,支持] [1234,Genna,客户] [1234,Mish,修补程序](如果是支持、客户或修补程序,则为服务器密钥、联系人名称和联系人类型) 我需要输出在一行中: [ServerNm,ServerCurrentAssignedToNm的WorkerIdsid,客户的WorkerIdsid,支持的WorkerIdsid] [hasgapp0108,akhate,gshysh,mishka] 现在我需要与usernames表连接以获取每个用户的用户名。 我是用完全的外接做的 代码是: 挑选 vw_dimserver.ServerNm作为主机名, (vw_DimWorker1.WorkerIdsid)作为用户名, (vw_DimWorker2.WorkerIdsid)作为[主要支持联系人], (vw_DimWorker3.WorkerIdsid)作为[主要客户联系人]Mysql 如何在sql中与3个表进行完全外部联接?,mysql,Mysql,我有三张桌子: 表1:“vw_dimserver”:[ServerKey,ServerNm,ServerCurrentAssignedToNm]例如:[1234,hasgapp0108,Aya] 表2“vw_DimWorker”:[WorkerEmailNm,WorkerIdsid]。例如:[Aya,akhate],[Genna,gshysh],[mish,mishka](就像名字和用户名一样) 表3“vw_FactHardwareAssetContact”:[ServerKey,Hardwar
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)...
我需要使用连接来完成此操作。尝试使用内部连接和组连接:
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)作为[主要客户联系人]
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 )
来自vw_dimserver
完全外部连接vw_FactHardwareAssetContact作为vw_FactHardwareAssetContact1
on(vw_dimserver.ServerKey=vw_FactHardwareAssetContact1.HardwareAssetKey和vw_FactHardwareAssetContact1.HardwareAssetContactTypeNm='Support'和vw_FactHardwareAssetContact1.HardwareAssetPrimaryId='1')
转换时将vw_DimWorker作为vw_DimWorker1进行完全外部连接(varchar(11),vw_FactHardwareAssetContact1.HardwareAssetWorkerKey)=vw_DimWorker1.WorkerWid
完全外部连接vw_DimWorker作为assings上的assings.WorkerEmailNm=vw_dimserver.ServerCurrentAssignedToNm上的assings
完全外部连接vw_FactHardwareAssetContact作为vw_FactHardwareAssetContact2 on(vw_dimserver.ServerKey=vw_FactHardwareAssetContact2.HardwareAssetKey和vw_FactHardwareAssetContact2.HardwareAssetContactTypeNm='Customer'和vw_FactHardwareAssetContact2.HardwareAssetPrimaryId='1')
转换时将vw_DimWorker作为vw_DimWorker2进行完全外部连接(varchar(11),vw_FactHardwareAssetContact2.HardwareAssetWorkerKey)=vw_DimWorker2.WorkerWid
完全外部连接vw_FactHardwareAssetContact作为vw_FactHardwareAssetContact11打开(vw_dimserver.ServerKey=vw_FactHardwareAssetContact11.HardwareAssetKey和vw_FactHardwareAssetContact11.HardwareAssetContactTypeNm='Support'和vw_FactHardwareAssetContact11.HardwareAssetPrimaryId='0')
转换时将vw_DimWorker作为vw_DimWorker11进行完全外部连接(varchar(11),vw_FactHardwareAssetContact11.HardwareAssetWorkerKey)=vw_DimWorker11.WorkerWid
完全外部连接vw_FactHardwareAssetContact作为vw_FactHardwareAssetContact22 on(vw_dimserver.ServerKey=vw_FactHardwareAssetContact22.HardwareAssetKey和vw_FactHardwareAssetContact22.HardwareAssetContactTypeNm='Customer'和vw_FactHardwareAssetContact11.HardwareAssetPrimaryId='0')
完全外部连接vw_DimWorker作为vw_DimWorker22转换(varchar(11),vw_FactHardwareAssetContact22.HardwareAssetWorkerKey)=vw_DimWorker22.workerwid在你的问题中,你只有2个表,而不是3.我编辑了我的帖子,请参见