MySQL左连接不正确

时间:2014-11-20 09:42:42

标签: mysql

我目前有两个表,一个包含预算信息,另一个表用于预算中的每一行。我正在尝试从预算表中选择信息,并获取每个预算中的行数。我当前的SQL是:

SELECT actual.ActualID, DateReceived, DateStart, DateEnd, ActualTotal, count(SchActualID) as NumberOfSch 
FROM actual 
LEFT JOIN schactual on actual.ActualID = schactual.ActualID 
where CentreID = 29 order by DateEnd DESC

我认为它按预期工作,但似乎它没有计算正确的值。 schactual表目前有4行,其中只有一行包含ActualID 29,但是如果我运行上面的查询,NumberOfSch就是3.我在这里做错了什么想法?

示例输入: centreID = 29

或者

centreID = 30

示例输出: 假设我运行上面的查询,它在实际表中有一个预算,在schActual表中有一个计划。预期的输出是:

ActualID | DateReceived | DateStart | DateEnd | ActualTotal | NumberOfSch

24 | 2014-11-02 | 2013-03-31 | 2014-03-31 | 1000 | 1

当前输出为:

ActualID | DateReceived | DateStart | DateEnd | ActualTotal | NumberOfSch

24 | 2014-11-02 | 2013-03-31 | 2014-03-31 | 1000 |的 2

表结构如下所示: 实际:

  • ActualID(PK)
  • CentreID(FK)
  • DateReceived
  • 日期开始
  • DateEnd
  • ActualTotal

SchActual:

  • SchActualID(PK)
  • ActualID(FK)
  • SCHNO
  • SchName
  • 费用
  • 等。

1 个答案:

答案 0 :(得分:1)

我认为你只需要将group by添加到该查询中,你就可以了。

以下是您的部分查询以简化解决方案:

<强>已更新

SELECT actual.actualid, count(schactualid) AS NumberOfSch 
FROM actual 
LEFT JOIN schactual on actual.actualid = schactual.actualid 
WHERE centreid = 29
GROUP BY actual.actualid

SQLFiddle:http://sqlfiddle.com/#!2/a0f3af/8