2017-02-11 101 views
0

我最近一直在学习MySQL和想知道如果有人可以帮助我解决这个问题我的工作..MySQL的高级加入

我有两个表,

首先是departmentTable

+------------+-----------+-----------+-----------+-----------+-----------+-----------+ 
| Department | Employee1 | Employee2 | Employee3 | Employee4 | Employee5 | Employee6 | 
+------------+-----------+-----------+-----------+-----------+-----------+-----------+ 
| Finance | Tim C  | Nora C | Susan P | Martin S | Donal D | Zita P | 
| HR   | Yvonne S | Marcus F | Mark B | Peter S | Ola G  | Gina P | 
| IT   | John W | Matt R | Paul M | Tom Y  | Jean S | Martin T | 
+------------+-----------+-----------+-----------+-----------+-----------+-----------+ 

二是employeeDetails表

+--------------+-------+------------+--------+ 
| EmployeeName | Shift | Employment | Salary | 
+--------------+-------+------------+--------+ 
| Donal D  | Night | Full  | 30000 | 
| Gina P  | Night | Part  | 21000 | 
| Jean S  | Night | Full  | 30000 | 
| John W  | Night | Full  | 24000 | 
| Marcus F  | Night | Full  | 21000 | 
| Mark B  | Day | Full  | 23000 | 
| Martin S  | Day | Full  | 23400 | 
| Martin T  | Day | Part  | 31000 | 
| Matt R  | Day | Full  | 22000 | 
| Nora C  | Day | Full  | 22000 | 
| Ola G  | Night | Full  | 21400 | 
| Paul M  | Day | Part  | 23000 | 
| Peter S  | Day | Part  | 25000 | 
| Susan P  | Day | Part  | 23000 | 
| Tim C  | Day | Full  | 24000 | 
| Tom Y  | Day | Full  | 23400 | 
| Yvonne S  | Day | Full  | 24000 | 
| Zita P  | Night | Part  | 31000 | 
+--------------+-------+------------+--------+ 

我试图找到一种方法如果有可能查询哪个部门有4天和2夜班员工。所以它应该输出是这样的..

+------------+-----------+-----------+-----------+-----------+-----------+-----------+ 
| Department | Employee1 | Employee2 | Employee3 | Employee4 | Employee5 | Employee6 | 
+------------+-----------+-----------+-----------+-----------+-----------+-----------+ 
| Finance | Tim C  | Nora C | Susan P | Martin S | Donal D | Zita P | 
| IT   | John W | Matt R | Paul M | Tom Y  | Jean S | Martin T | 
+------------+-----------+-----------+-----------+-----------+-----------+-----------+ 

任何帮助表示赞赏,我知道这是不是存储数据并获取他们最好的方式,但我想了解和学习更多关于MySQL的加入和计数。

+3

修正你的表结构。将员工存储在一列中 – GurV

+0

我正在介绍一些建议上述数据结构的培训材料。所以我只是试图了解它是否可能 – tom1123

+0

请在写入预先查询之前先对数据库进行规范化。否则它会浪费你的时间和才华。 – Imran

回答

0

你应该通过在一列中存储员工来修复你的表结构。

虽这么说,你可以试试这个:

select 
    d.* 
from departmentTable d 
join employeeDetails e on e.EmployeeName in (
    d.Employee1, d.Employee2, d.Employee3, 
    d.Employee4, d.Employee5, d.Employee6 
) 
group by d.department 
having sum(e.shift = 'Night') = 2 
and sum(e.shift = 'Day') = 4 
+0

这工作像一个魅力..非常感谢您的帮助,我正在做的在线课程在将数据库标准化之前将重点放在这些高级查询上..但是非常感谢您的帮助 – tom1123

0

您应该使用一张表格,您可以在其中存储所有员工的详细信息并在其中添加引用某个部门的详细信息。不要在employee1-n中使用你的方法。

另外,当我看到Nora C出现在两个部门时,可能会看看m-n关系。 Google是你的朋友

+0

所以看起来像是复制和粘贴错字..它应该是马库斯F ..有点卡住了,所以我决定问..我仍然会在这个芯片上擦掉..谢谢 – tom1123