【发布时间】:2019-12-21 00:37:07
【问题描述】:
当通过 JDBC 询问 MariaDB 中的给定表时(通过DatabaseMetaData#getTables),我们收到以下错误消息:
ERROR 1463 (42000): Non-grouping field 'TABLE_TYPE' is used in HAVING clause
我们正在使用 MySQL 连接器/J。
你知道这里有什么问题吗?
【问题讨论】:
-
错误消息实际上告诉您问题的确切原因(尽管您可能不清楚,因此您的帖子在这里)。
TABLE_TYPE列出现在HAVING子句中,但它没有出现在GROUP BY子句中。你不能那样做。 -
你错了。这是合法的sql。没有
group by clause的having clause仅表示group by clause默认为group by ()。正如您在答案中看到的,这个 sql 甚至由 JDBC 驱动程序生成。 -
是的,但根据 MySQL 服务器模式,它仍然可能是一个错误。
-
不,不是。请阅读问题。它不包含任何 SQL。使用 jdbc getTables() 时会发生错误。取决于 MariaDB sql_mode(不是 MySQL),这不是错误。在 MariaDB 的实际版本中,此错误已得到修复。您可以在 sql_mode 中设置值
ONLY_FULL_GROUP_BY,尽管进行了此设置,以下给定的语句仍将起作用。请参阅jira.mariadb.org/browse/MDEV-10663 ...这只是 MariabDB 中的一个已知错误,现已修复。 -
第一个问题是,您使用 JDBC 在 Java 中调用
getTables()。 MariaDB 数据库返回的错误毫无帮助,因为您看不到引发问题的调用背后的 SQL 语句,并问自己:为什么我不能使用getTables()。我们花了很长时间才找到真正的根本原因。我希望这个答案能帮助其他有同样问题的 JDBC 用户。