希望使用多个左联接运行查询。以下查询有效。

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|

最佳答案

您的预期结果对我来说真的没有意义。 saleslabor行之间没有关系,那么为什么covers值300排在labor值99.40之后?是什么将这两个值联系在一起?这就是为什么很难编写查询以产生结果的原因:您试图输出两列,每列中的数据都不相关。

我可能还没有很好地解释。我敢肯定别人可以!

关于mysql - MySQL左联接与日期范围,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8124927/

10-13 00:47