' where子句'中的未知列 - 在WHERE中使用ALL运算符

时间:2014-06-15 14:08:03

标签: mysql sql database

我有以下查询:

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

2 个答案:

答案 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中来解决问题。不过,最好修复查询。