问题描述
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;
但是这SELECT *
是不允许的,并且没有任何意义。
解决方法
我正在使用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
梅丁