我试图左联接同一个表(映射表(,虽然我可以这样做,因为我正在创建一个别名(联接到同一个表格,但在第一个表格中使用不同的列值(,它重复相同的列(尽管由于别名联接,它们在技术上不同(
场景-我有一名员工被分配了一个组,但他们可能有两个组被分配(由单独的列决定(,这取决于他们是被标记为"在线"还是"离线"。
Emp表
|EMP_ID|Online_Group|Offline_CG|Online |
:----: :----------: :--------: :-----:
|1234 |99 |Null |Online |
|1223 |88 |Null |Offline|
|1446 |Null |77 |Offline|
我正在尝试联接到一个映射表,如果Online_Group Value不为Null,则在映射表上左联接,如果匹配则从映射表返回所有列,而Offline_GroupValue不为Null,则在映像表上左连接,如果匹配返回映射表中的所有列
映射表
|OT_1 |OT_2 |OT_3 |OT_4 |
|:------ |:-------:|:-------:|--------:|
|99 |109 |400 |999 |
|77 |Null |Null |878 |
我最接近的方法是创建向左连接(我需要保留在Emp_table中的数据(
select *
from Emp_Table
left join Mapping_Table
on Emp_Table.Online_Group IN(Mapping_Table.OT_1, Mapping_Table.OT_2,
Mapping_Table.OT_3, Mapping_Table.OT_4)
left join Mapping_Table a
on Emp_Table.Offline_Group
IN(a.Mapping_Table.OT_1, a.Mapping_Table.OT_2,
a.Mapping_Table.OT_3, a.Mapping_Table.OT_4)
我得到的输出是下面的
|EMP_ID|Online_Group|Offline_CG|Online |OT_1|OT_2|OT_3|OT_4|OT_1|OT_2|OT_3|OT_4|
|:-----|:----------:|:--------:|:-----:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|
|1234 |99 |Null |Online |99 |109 |400 |999 |99 |109 |400 |999 |
|1223 |88 |Null |Offline|null|null|null|null|null|null|null|null|
|1446 |Null |77 |Offline|77 |null|null|878 |77 |null|null|878 |
理想情况下,我想要(I.E映射表中没有重复列
|EMP_ID|Online_Group|Offline_CG|Online |OT_1|OT_2|OT_3|OT_4|
|:-----|:----------:|:--------:|:-----:|:--:|:--:|:--:|:--:|
|1234 |99 |Null |Online |99 |109 |400 |999 |
|1223 |88 |Null |Offline|null|null|null|null|
|1446 |Null |77 |Offline|77 |null|null|878 |
表结构似乎有点笨拙,但。。。您不应该需要多个联接。使用类似IF或CASE的方法根据当前状态返回组id,然后联接到映射表。
SELECT e.Emp_Id , e.Online_Group , e.Offline_CG , m.OT_1 , m.OT_2 , m.OT_3 , m.OT_4 FROM ( SELECT Emp_Id , Online_Group , Offline_CG , IF(Online = 'Online', OnLine_Group, Offline_CG) AS GroupID FROM Emp_Table e ) e LEFT JOIN Mapping_Table m ON e.GroupId = m.OT_1 OR e.GroupId = m.OT_2 OR e.GroupId = m.OT_3 OR e.GroupId = m.OT_4
结果:
Emp_Id|Online_Group|Offline_CG|OT_1|OT_2|OT_3|OT_4-----:|----------:|---------:|:---|:---|:---|:---1234|99|null|99|109|400|9991223|88 |null|null|null|null1446 |>null| 77 |2ull| 878
db<gt;小提琴这里