簡體   English   中英

SQL查詢以從3個表中獲取數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM