【发布时间】:2014-10-26 04:56:13
【问题描述】:
我正在尝试组合查询以获取报告数据。
我不是 SQL 的新手,但我承认我真的只很少使用它。我有一小袋花样,我设法让它走得很远。
我感觉这次我可能需要一个嵌套查询来实现我的目标,而我以前从未尝试过使用它。
这是我的问题的一个极其简化的版本。
我有 2 张桌子:employee-header 和 employee-details。
这些表之间是一对多的关系(一个标题到多个细节)
标题包含有关员工的联系信息,每个员工一行,每个员工都有一个id - 主键。
详细信息表包含每个员工的多行,每行代表该员工获得的training-type 的记录。每一行都引用了表头中员工的id。
我的目标是选择员工列表及其培训类型,其中员工有多个 training-types... 即员工同时拥有培训类型 1 和培训类型 2
我想让我感到困惑的是可以有任意数量的训练类型,所以不是每个训练类型都有自己的列,而是有自己的行。
我试图让我的问题尽可能清晰,并将其简化到可以实现的程度......事实上,它实际上是一个更复杂的预先存在的查询的一部分,它还执行多个日期操作在详细信息行中查看培训是否有效、已过期或已存档(过期后已重新获得的培训项目)。如果需要,我很乐意提供任何可以提供帮助的更多信息。
如何获取满足我需求的结果集?
编辑:
为了让我的问题更清楚,这里有一些示例数据来说明这种情况。
employee-header表:
emp-id | employee-name
------------------
1 | Employee A
2 | Employee B
3 | Employee C
employee-detail表:
det-id | emp-id | training-type
-------------------------------
1 | 1 | forklift
2 | 1 | welding
3 | 1 | lifting
4 | 2 | forklift
5 | 2 | lifting
6 | 3 | welding
7 | 3 | forklift
因此,如果我想从标题中选择 emp-id 和 employee-name,在所有具有“叉车”和“焊接”training-type 的员工中,我的查询需要是什么。
【问题讨论】:
-
如果 multiple 表示 超过 1,请将
GROUP BY id ... HAVING COUNT(training_id) > 1放入您的子查询中。