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

时间:2015-07-23 19:31:39

标签: java sql database h2

我正在使用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

倚天

1 个答案:

答案 0 :(得分:6)

关于这个问题,MySQL已经破产了。它允许GROUP BY中既不在group by中也不在聚合函数参数中的列。实际上,documentation警告不要使用此扩展程序。

所以你可以这样做:

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 *是不被允许的,并且没有任何意义。