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