Mysql
 sql >> Database >  >> RDS >> Mysql

Rinominare le colonne in un'istruzione MySQL select con il pacchetto R RJDBC

Mi sono imbattuto nello stesso problema frustrante. A volte il AS la parola chiave avrebbe l'effetto previsto, ma altre volte no. Non sono riuscito a identificare le condizioni per farlo funzionare correttamente.

Risposta breve: (Grazie a Simon Urbanek (gestore del pacchetto per RJDBC), Yev e Sebastien! Vedi la Risposta lunga. ) Una cosa che puoi provare è aprire la tua connessione JDBC usando ?useOldAliasMetadataBehavior=true nella stringa di connessione. Esempio:

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)

Questo ha finito per funzionare per me! Vedi maggiori dettagli, inclusi avvertimenti, nella Risposta lunga.

Risposta lunga: Ho provato ogni sorta di cose, incluso creare visualizzazioni, modificare query, utilizzare istruzioni JOIN, NON utilizzare istruzioni JOIN, utilizzare istruzioni ORDER BY e GROUP BY, ecc. Non sono mai stato in grado di capire perché alcune delle mie query sono state in grado di rinominare le colonne e altri no.

Ho contattato il manutentore del pacchetto (Simon Urbanek.) Ecco cosa ha detto:

Quindi mi ha consigliato di assicurarmi di avere il driver JDBC più recente per MySQL. Avevo la versione più recente. Tuttavia, mi ha fatto pensare "forse È un bug con il driver JDBC". Quindi, ho cercato su Google:mysql jdbc driver bug alias .

Il risultato principale di questa query è stato una voce su bugs.mysql.com . Yev, utilizzando MySQL 5.1.22, afferma che quando ha aggiornato dalla versione del driver 5.0.4 alla 5.1.5, i suoi alias di colonna hanno smesso di funzionare. Alla domanda se fosse un bug.

Sebastien ha risposto:"No, non è un bug! È un cambiamento di comportamento documentato in tutte le versioni successive del driver". e suggerito di utilizzare ?useOldAliasMetadataBehavior=true , citando la documentazione per il driver JDBC .

Lettore di avvertenza: La documentazione per il driver JDBC afferma che

Non ho avuto il tempo di ricercare completamente cosa significa. In altre parole, non so quali siano tutte le ramificazioni dell'utilizzo di useOldAliasMetadataBehavior=true sono. Utilizzare a proprio rischio. Qualcun altro ha più informazioni?