[英]SQL query for getting data from 3 tables
一個MySQL問題,為初學者道歉。 我想從3個不同的表中獲取數據,如所附的屏幕截圖所示 。
給定的公司在兩個不同的表中維護員工的差旅,但出於技術原因。 兩種旅行都是可能的。 如果員工選擇第一個,則將其存儲在第一個表中。 此表中僅存儲此類旅行。 如果他選擇第二個,則將其與其他幾種工作時間一起存儲在第二個表中。 (這兩種旅行類型之間的差異與稅收有關,但在這里就不存在了。)我想生成一個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
我實現了聯接。
SELECT e.Name,
SUM(TravelType1.TravelDurationDays),
SUM(IF(TravelType2.Travel = 'yes' and TravelType2.Day >= '01.01.2015' and TravelType2.Day <= '31.12.2015', 1, 0))
FROM Employees e
LEFT JOIN TravelType1 ON e.EmployeeID = TravelType1.EmployeeID
LEFT JOIN TravelType2 ON e.EmployeeID = TravelType2.EmployeeID
GROUP BY e.EmployeeID;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.