H2 DB - 列必须在 Group By 列表中

H2 DB - Column must be in Group By list

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

我有一个 table 看起来像:

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"

查询应该没问题吧?在 MySql 上它可以正常工作...所以这里有什么问题?

发现这个如果有帮助:http://www.h2database.com/javadoc/org/h2/constant/ErrorCode.html#c90016

美汀

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