[英]Unknown column “TableB.Date” in 'having clause'
当我如下查询mysql数据库时,出现标题上面的错误。 不知道为什么,问题出在group by语句上,但是我尝试了几种变体,但似乎没有任何效果。
SELECT TableA.Name, DATE_FORMAT(TableB.Date, '%b %d %Y') AS "Date", COUNT(TableB.TableBID)
FROM TableA
INNER JOIN TableB
ON TableA.TableAID = TableB.TableAID
WHERE TableA.Name = "john"
GROUP BY DATE(TableB.Date)
HAVING DATE_FORMAT(TableB.Date, '%b %d %Y') >= "Apr 12 2014"
ORDER BY MAX(TableB.TableAID) ASC;
您应该使用where
条件在group by
之前进行比较。 并且,应该对日期而不是字符串进行比较:
SELECT a.Name, DATE_FORMAT(b.Date, '%b %d %Y') AS "Date", COUNT(b.TableBID)
FROM TableA a INNER JOIN
TableB b
ON a.TableAID = b.TableAID
WHERE a.Name = 'john' AND
b.date >= '2014-04-12'
GROUP BY DATE(b.Date)
ORDER BY MAX(b.TableAID) ASC;
您要在where
进行过滤的原因是,它减小了馈送到聚合算法的数据的大小。 您想要使用日期而不是字符串的原因是因为您不希望“ March”出现在“ April”之后。 请注意,我还将日期常量的定界符更改为单引号。
为什么不将TableB.Date >= '2014-04-12'
放在WHERE子句中?
HAVING子句过滤查询的GROUP BY部分的输出-而WHERE子句过滤查询到GROUP BY的输入-并且HAVING必须引用查询中命名的列之一。 由于选择了TableB.Date AS "Date"
,因此需要在HAVING子句中引用Date。 但是,由于您已使用DATE_FORMAT将Date转换为字符串,因此无法将其与另一个日期进行比较并获得期望的结果。
另外,由于DATE是MySQL中的关键字,因此您可以通过使用其他名称作为列名来避免麻烦。 您总是可以将其包装在反引号中,以确保MySQL知道它是对列名的引用。
HAVING可以看到别名,所以
HAVING Date >= "Apr 12 2014"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.