我遇到了同样令人沮丧的问题。有时AS 关键字会产生预期的效果,但有时不会。我无法确定使其正常工作的条件。
简答:(感谢 Simon Urbanek(RJDBC 的包维护者)、Yev 和 Sebastien!请参阅长回答。)您可以尝试的一件事是在连接字符串中使用 ?useOldAliasMetadataBehavior=true 打开 JDBC 连接。示例:
drv <- JDBC("com.mysql.jdbc.Driver", "C:/JDBC/mysql-connector-java-5.1.18-bin.jar", identifier.quote="`")
conn <- dbConnect(drv, "jdbc:mysql://server/schema?useOldAliasMetadataBehavior=true", "username", "password")
query <- "SELECT `a` AS `b` FROM table"
result <- dbGetQuery(conn, query)
dbDisconnect(conn)
这最终对我有用!在长答案中查看更多详细信息,包括注意事项。
长答案:我尝试了各种方法,包括创建视图、更改查询、使用 JOIN 语句、不使用 JOIN 语句、使用 ORDER BY 和 GROUP BY 语句等。我从来没有弄清楚为什么我的一些查询能够重命名列而其他查询不能。
我联系了包维护者 (Simon Urbanek)。他是这样说的:
在绝大多数情况下,这是 JBDC 驱动程序中的一个问题,因为除了调用驱动程序之外,RJDBC 确实无能为力。
然后他建议我确保我拥有最新的 MySQL JDBC 驱动程序。我确实有最新版本。然而,这让我想到“可能是 JDBC 驱动程序的一个错误”。于是,我在 Google 上搜索了:mysql jdbc driver bug alias。
此查询的最高结果是an entry at bugs.mysql.com。 Yev 使用 MySQL 5.1.22,他说当他从驱动程序版本 5.0.4 升级到 5.1.5 时,他的列别名停止工作。询问这是否是一个错误。
Sebastien 回答说:“不,这不是错误!这是记录在案的所有后续版本的驱动程序的行为变化。”并建议使用?useOldAliasMetadataBehavior=true,引用documentation for the JDBC driver。
Caveat Lector: JDBC 驱动程序的文档指出
useColumnNamesInFindColumn 优于 useOldAliasMetadataBehavior,除非您需要它提供的与 ResultSetMetadata 相关的特定行为。
我还没有时间充分研究这意味着什么。换句话说,我不知道使用useOldAliasMetadataBehavior=true 的所有后果是什么。使用风险自负。其他人有更多信息吗?