gpt4 book ai didi

mysql - 从 3 个表中获取数据的 SQL 查询

转载 作者:行者123 更新时间:2023-11-28 23:45:14 25 4
gpt4 key购买 nike

一道MySQL问题,初学者请见谅。我想从 3 个不同的表中获取数据,如您在附件中看到的 screenshot .

给定的公司在两个不同的表中维护员工的旅行,但出于技术原因。可以进行两种类型的旅行。如果员工选择第一个,则它存储在第一个表中。此表中仅存储此类旅行。如果他选择第二个,它会和其他几种工作时间一起存储在第二个表中。 (两种旅行类型之间的差异与税收有关,但这里没有兴趣。)我想生成一个 3 列结果集,显示今年每个人的旅行天数(见上面的屏幕截图)。很难使用 SUM 或 COUNT,因为两个表中的数据结构完全不同。我尝试使用下面的 SQL 查询,但这只是将两个不同的查询联合起来,而不是我想合并的内容。我希望看到结果集中的所有员工,无论他们是否出差。如果他们没有,我希望在那里看到 NULL 值。

SELECT Employees.Name as name1, SUM(TravelType1.TravelDurationDays) as Travel FROM `Employees` INNER JOIN `TravelType1` ON Employees.EmployeeID=TravelType1.EmployeeID WHERE (TravelType1.StartTime>='01.01.2015' and TravelType1.EndTime<='31.12.2015') GROUP BY Employees.Name

UNION

SELECT Employees.Name as name1, COUNT(*) as Travel FROM `Employees` INNER JOIN `TravelType1` ON Employees.EmployeeID=TravelType2.EmployeeID WHERE TravelType2.TravelDay>='01.01.2015' and TravelType2.TravelDay<='31.12.2015' and TravelType2.Travel='yes' GROUP BY Employees.Name

我不确定在一条 SQL 语句中是否可行,因为两个源表中的数据格式完全不同。我已经尝试了 LEFT JOIN 和 RIGHT JOIN 的一些组合,但还无法实现任何目标。

感谢任何帮助,谢谢!

最佳答案

这可以通过 2 个子选择来解决:

SELECT
e.Name,
(SELECT
SUM(TravelDurationDays)
FROM
TravelType1
WHERE
EmployeeID = e.EmployeeID
) TravelType1Days,
(SELECT
COUNT(*)
FROM
TravelType2
WHERE
EmployeeID = e.EmployeeID AND
Travel = 'yes'
) TravelType2Days
FROM
Employees e

关于mysql - 从 3 个表中获取数据的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33725419/

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