Mue*_*tee 2 mysql sql database select
我有一张桌子,里面装满了公司的电话号码.我的问题是,我们的员工每个号码都有一排,所以如果他有一部主电话和一部手机,我们就有两排他.
现在我需要显示所有员工的列表,包括他们的电话号码和手机号码(如果有)和电子邮件,但电子邮件在另一个表格中.我正在使用SQL.
一个例子:
PhoneTable
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 |
Run Code Online (Sandbox Code Playgroud)
EmailTable
ID | empID | Fullname | Email |
-----------------------------------------------------------------
25 | 02 | ManuelSan | Manuelsan@gg.com |
26 | 06 | Camillete | Camillete@gg.com |
27 | 07 | MarcusEsq | MarcusEsq@gg.com |
28 | 08 | FionaYem | FionaYem@gg.com |
Run Code Online (Sandbox Code Playgroud)
所以我想要这个输出
Fullname | Fix | Mobile | Email
------------------------------------------------------------------
ManuelSan | +34935556663 | +34652315453 | Manuelsan@gg.com
Camillete | +34934445621 | NULL | Camillete@gg.com
MarcusEsq | +34932547841 | NULL | MarcusEsq@gg.com
FionaYem | +34965214785 | +34652132124 | FionaYem@gg.com
Run Code Online (Sandbox Code Playgroud)
但我这样做:
SELECT distinct telf.Fullname, telf.Number, acti.EMAIL
FROM PhoneTable telf
left outer join EmailTable as acti on acti.empID = telf.empID
Run Code Online (Sandbox Code Playgroud)
我知道我需要做别的事,但我不知道是什么.如果他有手机和手机,我每个员工会得两排.
我该怎么办?
问候,
大量冗余数据,可能不一致; 但是,如果我们假设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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
86 次 |
| 最近记录: |