【问题标题】:SELECT with left join and union带有左连接和联合的 SELECT
【发布时间】:2019-04-21 08:36:37
【问题描述】:

我有这个查询返回某个员工班次的发票

SELECT
i.dateTime,i.amount,i.totalProfit,i.shiftID,
i_o.itemID,i_o.quantity,
item.name itemName,
p.full_name

from invoice i 

LEFT JOIN 
inv_order i_o on i_o.invID=i.invID

LEFT JOIN 
`item-service` item on item.itemID = i_o.itemID


LEFT JOIN person p on 
p.PID=i.personID

where i.shiftID =97

但是,我需要从员工表中获取员工姓名,而我只有 shiftID。

SELECT
i.dateTime,i.type,i.amount,i.totalProfit,i.shiftID,i_o.itemID,i_o.quantity,item.name itemName,p.full_name

from invoice i 

LEFT JOIN 
inv_order i_o on i_o.invID=i.invID

LEFT JOIN 
`item-service` item on item.itemID = i_o.itemID


LEFT JOIN person p on 
p.PID=i.personID

where i.shiftID =97

UNION

SELECT e.name from employee e

left join shift s on s.empID = e.empID

where s.shiftID =97

mysql 返回这个错误

使用的 SELECT 语句有不同的列数

【问题讨论】:

    标签: mysql select left-join union unions


    【解决方案1】:

    关于问题的错误信息非常清楚:您的第一个查询返回 8 列数据,而您的第二个只有 1 列,因此您不能UNION 他们。看来您可能只想通过shift 表来JOIN employee 表,例如

    SELECT i.dateTime
          ,i.type
          ,i.amount
          ,i.totalProfit
          ,i.shiftID
          ,i_o.itemID
          ,i_o.quantity
          ,item.name AS itemName
          ,p.full_name
          ,e.name
    FROM invoice i 
    LEFT JOIN inv_order i_o ON i_o.invID=i.invID
    LEFT JOIN `item-service` item ON item.itemID = i_o.itemID
    LEFT JOIN person p ON p.PID=i.personID
    LEFT JOIN shift s ON s.shiftID = i.shiftID
    LEFT JOIN employee e ON e.empID = s.empID
    WHERE i.shiftID = 97
    

    【讨论】:

      猜你喜欢
      • 2015-02-22
      • 2014-02-06
      • 1970-01-01
      • 2016-12-13
      • 2015-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-14
      相关资源
      最近更新 更多