ВЫБЕРИТЕ с левым соединением и объединением - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть этот запрос, который возвращает счета, сделанные в определенную смену сотрудника

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 имеют различное количество столбцов

1 Ответ

0 голосов
/ 19 ноября 2018

Сообщение об ошибке совершенно ясно о проблеме: ваш первый запрос возвращает 8 столбцов данных, а ваш второй только 1, поэтому вы не можете UNION их.Кажется, вы, вероятно, хотите просто JOIN таблицу employee через таблицу shift, например,

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
...