gpt4 book ai didi

mysql - SQL从表头表中选择,其中明细表行有多个值

转载 作者:搜寻专家 更新时间:2023-10-30 20:39:37 28 4
gpt4 key购买 nike

我正在尝试组合查询以获取报告数据。

我不是 SQL 的新手,但我承认我只是很少使用它。我有一小部分技巧,我设法让它们走得很远。

我感觉这次我可能需要一个嵌套查询来实现我的目标,这是我以前从未尝试过的。

这是我的问题的一个极其简化的版本。

我有 2 个表:employee-headeremployee-details

这些表之间是一对多的关系(1 个标题到许多细节)

标题包含有关员工的联系信息,每个员工一行,每个员工都有一个 id - 主键。

详细信息表包含每个员工的多行,每行代表该员工获得的training-type 的记录。每行引用标题表中员工的 id

我的目标是选择一个员工列表和他们的培训类型,其中员工有多个 training-types...即员工有 training-type-1 和 training-type-2

我想让我感到困惑的是,可以有任意数量的训练类型,所以不是每个训练类型都有自己的列,而是有自己的行。

我试图尽可能清楚地说明我的问题,并将其简化到可以实现的程度......事实是它实际上是一个更复杂的预先存在的查询的一部分,该查询还执行多个日期操作在详细信息行上查看培训是否有效、过期或已存档(过期的培训项目,自到期后已重新获得)。如果需要,我很乐意提供更多可能有用的信息。

我怎样才能获取满足我需要的结果集?

编辑:

为了让我的问题更清楚,这里有一些示例数据可以说明情况。

employee-header 表:

emp-id | employee-name
------------------
1 | Employee A
2 | Employee B
3 | Employee C

员工详细信息表:

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-idemployee-name,所有员工都有 training-type 关于“叉车”和“焊接”,我的查询需要是什么。

最佳答案

这可以通过子查询来实现:

SELECT h.id, h.employee_name, d.training-type
FROM employee-header h INNER JOIN employee-details d ON h.id = d.id
WHERE h.id IN -- here is the sub-query
(SELECT id from employee-details
WHERE training-type IN ('forklift','welding')
GROUP BY id HAVING COUNT(DISTINCT training-type) = 2)

当你需要选择匹配的确切数字时,你可以在选择标准中使用 IN 子句,然后只使用匹配请求值数量的 HAVING COUNT(DISTINCT training-type)

关于mysql - SQL从表头表中选择,其中明细表行有多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25614699/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com