【问题标题】:MySQL Advance JoinsMySQL 高级连接
【发布时间】:2017-02-11 15:21:03
【问题描述】:

我最近一直在学习 MySQL,想知道是否有人可以帮助我解决我正在解决的这个问题..

我有两张桌子,

首先是一个部门表

+------------+-----------+-----------+-----------+-----------+-----------+-----------+
| 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 中的连接和计数的更多信息。

【问题讨论】:

  • 修复你的表结构。在一列中存储员工
  • 我正在介绍一些建议上述数据结构的培训材料。所以我只是想了解它是否可能
  • 请先规范化您的数据库,然后再编写高级查询。否则会浪费你的时间和才华。

标签: mysql join count


【解决方案1】:

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

话虽如此,你可以试试这个:

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

【讨论】:

  • 这就像一个魅力.. 非常感谢您的帮助,我正在做的在线课程在规范化数据库之前非常关注这些高级查询.. 但非常感谢您再次提供帮助
【解决方案2】:

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

另外,我看到 Nora C 出现在两个部门,也许可以看看 m-n 关系。 Google 是您的朋友

【讨论】:

  • 所以看起来是复制粘贴错字.. 应该是 Marcus F.. 有点卡住了,因此我决定问.. 我还是会解决它..谢谢
猜你喜欢
  • 2012-02-07
  • 1970-01-01
  • 1970-01-01
  • 2022-11-17
  • 2015-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-19
相关资源
最近更新 更多