希望使用多个左联接运行查询。以下查询有效。
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
任何获得预期结果的帮助将不胜感激。
编辑:
这是带有我要加入的示例数据的表。它们都共享一个公共ID。
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|
最佳答案
您的预期结果对我来说真的没有意义。 sales
和labor
行之间没有关系,那么为什么covers
值300排在labor
值99.40之后?是什么将这两个值联系在一起?这就是为什么很难编写查询以产生结果的原因:您试图输出两列,每列中的数据都不相关。
我可能还没有很好地解释。我敢肯定别人可以!
关于mysql - MySQL左联接与日期范围,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8124927/