Narazil jsem na stejný frustrující problém. Někdy AS
klíčové slovo by mělo zamýšlený účinek, ale jindy ne. Nebyl jsem schopen identifikovat podmínky, aby to fungovalo správně.
Krátká odpověď: (Děkujeme Simonu Urbánkovi (správci balíčků pro RJDBC), Yevovi a Sebastienovi! Viz Dlouhá odpověď. ) Jedna věc, kterou můžete zkusit, je otevřít připojení JDBC pomocí ?useOldAliasMetadataBehavior=true
ve vašem připojovacím řetězci. Příklad:
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)
Tohle mi nakonec vyšlo! Další podrobnosti, včetně upozornění, naleznete v Dlouhé odpovědi
Dlouhá odpověď: Zkoušel jsem nejrůznější věci, včetně vytváření pohledů, změn dotazů, používání příkazů JOIN, NOT pomocí příkazů JOIN, používání příkazů ORDER BY a GROUP BY atd. Nikdy jsem nebyl schopen přijít na to, proč některé z mých dotazů dokázaly přejmenovat sloupce a ostatní ne.
Kontaktoval jsem správce balíku (Simon Urbánek.) Zde je to, co řekl:
Poté mi doporučil, abych se ujistil, že mám nejnovější ovladač JDBC pro MySQL. Měl jsem nejnovější verzi. Nicméně mě to přivedlo na myšlenku "možná je to chyba v ovladači JDBC." Hledal jsem tedy na Googlu:mysql jdbc driver bug alias
.
Nejlepší výsledek pro tento dotaz byl záznam na bugs.mysql.com . Yev používající MySQL 5.1.22 říká, že když upgradoval z verze ovladače 5.0.4 na 5.1.5, jeho aliasy sloupců přestaly fungovat. Dotaz, zda to byla chyba.
Sebastien odpověděl:"Ne, to není chyba! Je to zdokumentovaná změna chování ve všech následujících verzích ovladače." a navrhl použít ?useOldAliasMetadataBehavior=true
s odkazem na dokumentaci ovladače JDBC
.
Caveat Lector: V dokumentaci k ovladači JDBC je uvedeno, že
Neměl jsem čas plně prozkoumat, co to znamená. Jinými slovy, nevím, jaké jsou všechny důsledky použití useOldAliasMetadataBehavior=true
jsou. Použití na vlastní nebezpečí. Má někdo další informace?