Mysql
 sql >> Base de données >  >> RDS >> Mysql

Renommer des colonnes dans une instruction de sélection MySQL avec le package R RJDBC

J'ai rencontré le même problème frustrant. Parfois, le AS mot-clé aurait l'effet escompté, mais d'autres fois ce ne serait pas le cas. Je n'ai pas pu identifier les conditions pour que cela fonctionne correctement.

Réponse courte : (Merci à Simon Urbanek (responsable du paquet pour RJDBC), Yev et Sébastien ! Voir la réponse longue. ) Une chose que vous pouvez essayer est d'ouvrir votre connexion JDBC en utilisant ?useOldAliasMetadataBehavior=true dans votre chaîne de connexion. Exemple :

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)

Cela a fini par fonctionner pour moi! Voir plus de détails, y compris les mises en garde, dans la réponse longue.

Réponse longue : J'ai essayé toutes sortes de choses, y compris créer des vues, modifier des requêtes, utiliser des instructions JOIN, PAS utiliser des instructions JOIN, utiliser des instructions ORDER BY et GROUP BY, etc. Je n'ai jamais pu comprendre pourquoi certaines de mes requêtes pouvaient renommer des colonnes et d'autres non.

J'ai contacté le responsable du paquet (Simon Urbanek.) Voici ce qu'il a dit :

Il m'a ensuite recommandé de m'assurer que j'avais le pilote JDBC le plus récent pour MySQL. J'avais la version la plus récente. Cependant, cela m'a fait penser "peut-être que c'est un bogue avec le pilote JDBC". Donc, j'ai cherché sur Google :mysql jdbc driver bug alias .

Le meilleur résultat pour cette requête était une entrée sur bugs.mysql.com . Yev, utilisant MySQL 5.1.22, dit que lorsqu'il est passé de la version 5.0.4 du pilote à la 5.1.5, ses alias de colonne ont cessé de fonctionner. A demandé s'il s'agissait d'un bogue.

Sébastien a répondu :"Non, ce n'est pas un bogue ! C'est un changement de comportement documenté dans toutes les versions ultérieures du pilote." et suggéré d'utiliser ?useOldAliasMetadataBehavior=true , citant la documentation pour le pilote JDBC .

Mise en garde lecteur : La documentation du pilote JDBC indique que

Je n'ai pas eu le temps de faire des recherches approfondies sur ce que cela signifie. En d'autres termes, je ne sais pas quelles sont toutes les ramifications de l'utilisation de useOldAliasMetadataBehavior=true sommes. À utiliser à vos risques et périls. Quelqu'un d'autre a-t-il plus d'informations ?