为什么MySQL告诉我该列不存在?
我有三张桌子: associationid,名称 总状花序 statsid、日期、关联ID、类型ID、数量 我的目标是得到所有关联的列表,对于所有关联,类型的列表,数量,排序方式,首先是关联的总数,然后是每种类型。 对此,我有以下疑问:为什么MySQL告诉我该列不存在?,mysql,subquery,Mysql,Subquery,我有三张桌子: associationid,名称 总状花序 statsid、日期、关联ID、类型ID、数量 我的目标是得到所有关联的列表,对于所有关联,类型的列表,数量,排序方式,首先是关联的总数,然后是每种类型。 对此,我有以下疑问: SELECT association.name AS associationName, race.name AS raceName, SUM(report.quantity) AS quantity, subreq
SELECT association.name AS associationName,
race.name AS raceName,
SUM(report.quantity) AS quantity,
subrequest.totalquantity as totalquantity
FROM stats report
JOIN association ON association.id = report.associationId
JOIN race ON race.id = report.raceId
JOIN (
SELECT SUM(report.quantity) AS totalquantity,
association.id AS subId
FROM stats report
JOIN association ON association.id = report.associationId
WHERE date LIKE "2013-11-%"
GROUP BY association.id
ORDER BY totalquantity DESC
) subrequest ON subrequest.subId = association.id
WHERE date LIKE "2013-11-%"
GROUP BY association.id, race.id
ORDER BY totalquantity DESC, quantity DESC
它工作得非常好!但是现在,我只想为每个协会提供两种最大的类型。我试过这个:
set @num := 0, @association := '';
select associationName, raceName, quantity, totalquantity,
@num := if(@association = associationName, @num + 1, 1) as row_number,
@association := associationName as dummy
FROM (
SELECT association.name AS associationName,
race.name AS raceName,
SUM(report.quantity) AS quantity,
subrequest.totalquantity as totalquantity
FROM stats report
JOIN association ON association.id = report.associationId
JOIN race ON race.id = report.raceId
JOIN (
SELECT SUM(report.quantity) AS totalquantity,
association.id AS subId
FROM stats report
JOIN association ON association.id = report.associationId
WHERE date LIKE "2013-11-%"
GROUP BY association.id
ORDER BY totalquantity DESC
) subrequest ON subrequest.subId = association.id
WHERE date LIKE "2013-11-%"
GROUP BY association.id, race.id
ORDER BY totalquantity DESC, quantity DESC
) x
WHERE row_number <= 2
这样,我就有了一个错误:1054-where子句中的未知列“row_number”。如果我删除where子句,它工作正常,并且得到了预期的结果。我还有一个列行号和正确的数字
我必须这样做才能让它工作:
set @num := 0, @association := '';
select associationName, raceName, quantity, totalquantity
FROM (
select associationName, raceName, quantity, totalquantity,
@num := if(@association = associationName, @num + 1, 1) as row_number,
@association := associationName as dummy
FROM (
SELECT association.name AS associationName,
race.name AS raceName,
SUM(report.quantity) AS quantity,
subrequest.totalquantity as totalquantity
FROM association_race_report report
JOIN association ON association.id = report.associationId
JOIN race ON race.id = report.raceId
JOIN (
SELECT SUM(report.quantity) AS totalquantity,
association.id AS subId
FROM association_race_report report
JOIN association ON association.id = report.associationId
WHERE date LIKE "2013-11-%"
GROUP BY association.id
ORDER BY totalquantity DESC
) subrequest ON subrequest.subId = association.id
WHERE date LIKE "2013-11-%"
GROUP BY association.id, race.id
ORDER BY totalquantity DESC, quantity DESC
) x
)y
WHERE row_number <= 2
这个很好用!但是我不明白为什么我需要添加另一个级别的请求以使WHERE子句起作用?添加一个无用的查询级别真让我恼火。有没有办法让它发挥作用?为什么MySQL会出现这个错误
谢谢大家! MySQL不喜欢列引用,因为它是在查询的select部分中定义的——它还不能在JOIN和where子句中使用
解决方案是用定义别名的表达式替换别名,或者创建一个中间子查询,以避免重写整个过程,我认为这两种方法都是可以找到的。查询优化器将正常删除中间查询。我终于找到了解决方案!我只需要替换其中的行号