我有一张桌子,上面有一家公司的电话号码。
我的问题是,我们每个员工的电话号码都有一排,所以如果他有一个主电话和一个手机,我们就有他两排。
现在我需要显示所有员工的名单,包括他们的电话号码、手机号码(如果他有的话)和电子邮件,但电子邮件在另一个表中。
我正在使用SQL。
例如:
音素
ID | EmpID | FullName | Number | Type |
----------------------------------------------------------------
115 | 02 | ManuelSan | +34935556663 | Fix |
116 | 02 | ManuelSan | +34652315453 | Mobile |
117 | 06 | Camillete | +34934445621 | Fix |
118 | 07 | MarcusEsq | +34932547841 | Fix |
119 | 08 | FionaYem | +34965214785 | Fix |
120 | 08 | FionaYem | +34652132124 | Mobile |
电子邮件表
ID | empID | Fullname | Email |
-----------------------------------------------------------------
25 | 02 | ManuelSan | [email protected] |
26 | 06 | Camillete | [email protected] |
27 | 07 | MarcusEsq | [email protected] |
28 | 08 | FionaYem | [email protected] |
所以我想要这个输出
Fullname | Fix | Mobile | Email
------------------------------------------------------------------
ManuelSan | +34935556663 | +34652315453 | [email protected]
Camillete | +34934445621 | NULL | [email protected]
MarcusEsq | +34932547841 | NULL | [email protected]
FionaYem | +34965214785 | +34652132124 | [email protected]
但我这样做:
SELECT distinct telf.Fullname, telf.Number, acti.EMAIL
FROM PhoneTable telf
left outer join EmailTable as acti on acti.empID = telf.empID
我知道我需要做些别的事,但我不知道该怎么做。如果他有电话和手机,我会给他两排。
我该怎么做?
当做,
最佳答案
很多冗余数据,可能不一致;但是如果我们假设empid
定义了名称,并且PhoneTable
包含每个员工的条目,那么查询可以如下所示。查询的第一部分将一个雇员的不同记录合并为一个记录;然后左外连接获取相应的电子邮件。请注意,如果有员工有电子邮件,但连一个电话号码都没有,则查询仍不完整:
select *
from (select empid,
max(fullname),
max(case when type='Fix' then Number else NULL end) as fix,
max(case when type='Mobile' then Number else NULL end) as Mobile
from PhoneTable
group by empid) phone
left outer join EMailTable e on phone.empid=e.empid
关于mysql - SQL如何正确进行外部联接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44544462/