H2 DB-列必须在“分组依据”列表中

问题描述

MysqL就此而言是坏的。它允许聚合函数GROUP BYgroup by或参数中都不存在的列。实际上,文档警告不要使用此扩展名。

因此,您可以执行以下操作:

SELECT state
FROM DIYANET
WHERE COUNTRY = 'Germany'
GROUP BY STATE 
ORDER BY STATE;

或类似这样的东西:

SELECT state, min(city), min(lat), . . .
FROM DIYANET
WHERE COUNTRY = 'Germany'
GROUP BY STATE 
ORDER BY STATE;

但是这SELECT *是不允许的,并且没有任何意义。

解决方法

我正在使用H2-DB访问静态数据库…

我有一张桌子,看起来像:

COUNTRY     STATE       CITY         LAT     LNG     COUNTRYID      STATEID     CITYID 
"Germany"   "Berlin"    ""           1.23    1.23    1              1           0
"Germany"   "München"   ""           1.23    1.23    1              2           0
"USA"       "Alabama"   "Auburn"     1.23    1.23    2              1           1
"USA"       "Alabama"   "Birmingham" 1.23    1.23    2              1           2
"USA"       "Alaska"    "Anchorage"  1.23    1.23    2              2           1
"USA"       "Alaska"    "Cordova"    1.23    1.23    2              2           2

它的名单很多,有很多国家,其中大多数只有国家和州(例如德国在这里,而州是城市),也有一个城市(在这里是美国)…

问题是现在,当我查询

SELECT * FROM MyTable WHERE COUNTRY = 'Germany' group by STATE order by STATE

为了得到州(或城市)的排序列表,我收到一条错误消息,说

Field CITY must be in the GROUP BY list

如果该行有一个城市,我需要整行,否则我只需要State列,但是查询后我可以知道,是否使用了city列,所以我必须查询“ *”的“ STATE”

查询应该可以,还是?在MySql上它可以正常工作…所以这里出了什么问题?

发现此内容是否有帮助:http
:
//www.h2database.com/javadoc/org/h2/constant/ErrorCode.html#c90016

梅丁