mysql - 带有左连接和并集的 SELECT

标签 mysql select left-join union

我有一个查询,该查询返回特定员工类次的发票

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 语句具有不同的列数

最佳答案

错误消息对于问题非常清楚:您的第一个查询返回 8 列数据,而第二个查询仅返回 1 列,因此您无法对它们进行UNION。看来您可能只想通过 shiftJOIN 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

关于mysql - 带有左连接和并集的 SELECT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53366939/

相关文章:

mysql - SQL 查询,带有 NULL 的 LEFT JOIN

php - 如何填充表单以编辑现有数据

mysql - 计算新项目的托管要求?

php - MySQL : Getting the sum of multiple columns

php - MySQL加入3个级联表

mysql - sqlalchemy - 在 MySQL 中按月选择记录

php - 将值从数据库插入到 xml 表,并在 html 中使用 ajax 输出它们

Mysql计算一个count(*)的中值与一个group by some field

mysql - 哪个更优化?连接 2 个表或使用表中的附加列

sql - Postgresql中根据条件获取上一条记录