我有以下查询:
select tem.TEMAT, pra.NR_PRAC
from tematy tem, pracownicy pra, wyplaty wyp
where pra.NR_PRAC = wyp.NR_PRAC
and wyp.NR_TEM = tem.NR_TEM
group by tem.TEMAT, pra.NR_PRAC
having sum(wyp.KWOTA)>=ALL(
select sum(w.kwota)
from wyplaty w, pracownicy p
where w.NR_TEM=tem.NR_TEM and p.NR_PRAC=w.NR_PRAC )
无效。
错误:
SQL Error (1054): Unknown column 'uczelnia.tem.NR_TEM' in 'where clause'
似乎我无法在嵌套查询中使用tem.NR_TEM
。
答案 0 :(得分:1)
您无法使用它,因为它是按部分分组...尝试以这种方式安排它:
select tem.TEMAT, pra.NR_PRAC,
(select sum(w.kwota) from wyplaty w, pracownicy p where w.NR_TEM=tem.NR_TEM and p.NR_PRAC=w.NR_PRAC) AS irs
from tematy tem, pracownicy pra, wyplaty wyp where pra.NR_PRAC = wyp.NR_PRAC and wyp.NR_TEM = tem.NR_TEM group by tem.TEMAT, pra.NR_PRAC having sum(wyp.KWOTA)>=ALL(irs)
将子查询放在外部查询的选择列表中应该可以解决问题。
答案 1 :(得分:1)
这样做你想要的吗?
select tem.TEMAT, pra.NR_PRAC
from wyplaty wyp join
tematy tem
on wyp.NR_TEM = tem.NR_TEM join
pracownicy pra
on pra.NR_PRAC = wyp.NR_PRAC
group by tem.TEMAT, pra.NR_PRAC
order by sum(wyp.KWOTA) desc
limit 1;
您的问题是因为您正在group by
之后访问表中的列,而此列不在select
子句中。问题有点在文档中解释:
类似的MySQL扩展适用于HAVING子句。在标准 SQL,包含GROUP BY子句的查询无法引用 HAVING子句中未分配的非聚合列 GROUP BY子句。 MySQL扩展允许引用此类列 简化计算。此扩展假定为非扩展 列将具有相同的分组值。否则,结果是 不确定的。
"裸露" column是相关子查询中使用的列。您可以通过将列放在select
中来解决问题。不过,最好修复查询。