我正在使用 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 列,但我在查询后才能知道它是否使用城市列,所以我必须查询“*” “国家”的
查询应该没问题,或者?在 MySql 上它工作正常...那么这里有什么问题呢?
发现这个如果有帮助的话:http://www.h2database.com/javadoc/org/h2/constant/ErrorCode.html#c90016
Metin
MySQL 在这方面已经被打破了。它允许列GROUP BY
既不在group 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;
But SELECT *
是不允许的,也没有任何意义。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)