我正在使用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
倚天
答案 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 *
是不被允许的,并且没有任何意义。