2013-08-12 9 views
1

Итак, скажем, я запускаю магазин. В этом магазине у меня шесть сотрудников. Эти сотрудники сообщают о каждой продаже в базу данных MySQL. Если работник не производит продажу, он не делает записей в эту систему в течение недели. Оплатить день приходит, и мне нужно, чтобы выяснить, сколько платить каждый основанный на продажах:Отображение всех значений в столбце, в котором нет доступных данных.

Select Staff, count(Item_Sold) from Inventory where Sale_Date between '2013-05-02%' and '2013-05-08%' group by Staff; 

я бы, скорее всего, получить выход:

Staff  Items_Sold 
Aaron  6 
Bob   2 
Jeff  4 
Karen  13 

Теперь предположим, я никогда не стрелял кто угодно, и персонал всегда остается прежним. Позволяет также сказать, что они сделали продажи в прошлом. Скажем, я хочу видеть всех сотрудников в своем еженедельном отчете, независимо от того, продавали ли они или нет. Как мне поместить это в мой запрос, не избавившись от корреляции «Дата»? И.Е.

Staff  Items_Sold 
Aaron  6 
Bob   2 
Geraldo  0 
Jeff  4 
Karen  13 
Mary  0 

ответ

1

Вы можете использовать то, что называется left join. Вот хорошее объяснение: http://www.tizag.com/mysqlTutorial/mysqlleftjoin.php

Как правило, левое соединение будет возвращать все результаты из первой таблицы независимо от погоды или не иметь связанных данных во второй таблице.

+0

С этим вопросом, всю необходимую информацию находится в той же таблице. Можете ли вы назвать ту же таблицу дважды? – Smiff

0

Если у вас есть отдельная таблица штаба (и вы должны), вы можете сделать это с помощью LEFT JOIN:

SELECT Staff.Name, count(Item_Sold) 
FROM Staff 
LEFT JOIN Inventory ON Staff.Name = Inventory.Staff 
WHERE Sale_Date BETWEEN '2013-05-02%' AND '2013-05-08%' 
GROUP BY Staff.Name 
Смежные вопросы