Нужно выполнить запрос, используя несколько левых соединений.Следующий запрос работает.
SELECT directory.location, sales.covers, labor.hours
FROM t_directory directory
LEFT JOIN t_sales sales
ON sales.id = directory.id
AND sales.business_date = '2011-11-14'
LEFT JOIN t_labor labor
ON labor.id = directory.id
AND labor.business_date = '2011-11-14'
ORDER BY directory.id ASC
Проблема возникает, если я пытаюсь выполнить запрос в диапазоне дат.Добавление предложения Group By дублировало строки.Сейчас я на самом деле использую два отдельных запроса, что, вероятно, является лучшей практикой и лучшим решением.Это просто из чистого любопытства на данный момент.
Вот что у меня так далеко.
SELECT directory.location, sales.covers, labor.hours
FROM t_directory directory
LEFT JOIN t_sales sales
ON sales.id = directory.id
AND sales.business_date BETWEEN '2011-11-13' AND '2011-11-14'
LEFT JOIN t_labor labor
ON labor.id = directory.id
AND labor.business_date BETWEEN '2011-11-13' AND '2011-11-14'
GROUP BY directory.id, sales.business_date, labor.business_date
ORDER BY directory.id ASC
Очевидно, что что-то не так с моим предложением GROUP BY, а также, возможно, с другими ошибками.
Я ищу такой результат:
| location | covers | labor |
=============================
loc1 | 300 | 99.40
loc1 | 325 | 100.50
loc2 | 250 | 89.00
loc2 | 275 | 90.20
loc3 | 400 | 100.00
loc3 | 500 | 122.90
Иконечно, что я на самом деле получаю:
| location | covers | labor |
=============================
loc1 | 300 | 99.40
loc1 | 300 | 100.50
loc1 | 325 | 99.40
loc1 | 325 | 100.50
loc2 | 250 | 89.00
loc2 | 250 | 90.20
loc2 | 275 | 89.00
loc2 | 275 | 90.20
loc3 | 400 | 100.00
loc3 | 400 | 122.90
loc3 | 500 | 100.00
loc3 | 500 | 122.90
Любая помощь в получении ожидаемых результатов будет принята с благодарностью.
РЕДАКТИРОВАТЬ: Вот таблицы с образцами данных, к которым я хочу присоединиться.Все они имеют общий идентификатор.
t_directory
| *id | location |
|100 | loc1 |
|101 | loc2 |
|102 | loc3 |
t_sales
| business_date | id | sales | covers |
| 2011-11-13 | 103| 4000.00 | 300 |
| 2011-11-14 | 103| 4050.00 | 325 |
t_labor
|business_date | id | hours |
| 2011-11-13 | 103| 99.40 |
| 2011-11-14 | 103| 100.50|