met*_*e38 4 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
Run Code Online (Sandbox Code Playgroud)
它是一个包含许多国家的巨大名单,其中大多数只有国家和州(如德国,而国家是城市),少数也有城市(如美国这里)......
问题是现在,当我查询
SELECT * FROM MyTable WHERE COUNTRY = 'Germany' group by STATE order by STATE
Run Code Online (Sandbox Code Playgroud)
为了获得状态(或城市)的排序列表,我得到一个错误说
Field CITY must be in the GROUP BY list
Run Code Online (Sandbox Code Playgroud)
如果行有一个城市,我需要整行,否则我只需要State列,但我可以知道查询后,它是否使用城市列,所以我必须查询"*"而不是"国家"
查询应该没问题,还是?在MySql上它正常工作......所以这里的问题是什么?
如果有帮助,请找到它:http://www.h2database.com/javadoc/org/h2/constant/ErrorCode.html#c90016
倚天
关于这个问题,MySQL已经破产了.它允许列中的列GROUP BY既不是group by聚合函数也不是聚合函数的参数.实际上,文档警告不要使用此扩展.
所以你可以这样做:
SELECT state
FROM DIYANET
WHERE COUNTRY = 'Germany'
GROUP BY STATE
ORDER BY STATE;
Run Code Online (Sandbox Code Playgroud)
或类似的东西:
SELECT state, min(city), min(lat), . . .
FROM DIYANET
WHERE COUNTRY = 'Germany'
GROUP BY STATE
ORDER BY STATE;
Run Code Online (Sandbox Code Playgroud)
但是SELECT *不允许,也没有意义.