Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Umbenennen von Spalten in einer MySQL-Select-Anweisung mit dem R-Paket RJDBC

Ich bin auf das gleiche frustrierende Problem gestoßen. Manchmal der AS Schlüsselwort würde seine beabsichtigte Wirkung haben, aber manchmal nicht. Ich konnte die Bedingungen nicht identifizieren, damit es richtig funktioniert.

Kurze Antwort: (Danke an Simon Urbanek (Paketbetreuer für RJDBC), Yev und Sebastien! Siehe die Lange Antwort. ) Sie können versuchen, Ihre JDBC-Verbindung mit ?useOldAliasMetadataBehavior=true zu öffnen in Ihrer Verbindungszeichenfolge. Beispiel:

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)

Das hat am Ende für mich funktioniert! Weitere Einzelheiten, einschließlich Vorbehalten, finden Sie in der Langen Antwort.

Lange Antwort: Ich habe alle möglichen Dinge ausprobiert, einschließlich Ansichten erstellen, Abfragen ändern, JOIN-Anweisungen verwenden, JOIN-Anweisungen NICHT verwenden, ORDER BY- und GROUP BY-Anweisungen verwenden usw. Ich konnte nie herausfinden, warum einige meiner Abfragen Spalten umbenennen konnten und andere nicht.

Ich kontaktierte den Paketbetreuer (Simon Urbanek). Hier ist, was er sagte:

Dann empfahl er mir, sicherzustellen, dass ich den neuesten JDBC-Treiber für MySQL habe. Ich hatte die aktuellste Version. Es brachte mich jedoch zum Nachdenken:"Vielleicht IST es ein Fehler mit dem JDBC-Treiber." Also suchte ich bei Google nach:mysql jdbc driver bug alias .

Das beste Ergebnis für diese Abfrage war ein Eintrag bei bugs.mysql.com . Yev, der MySQL 5.1.22 verwendet, sagt, dass seine Spaltenaliase beim Upgrade von Treiberversion 5.0.4 auf 5.1.5 nicht mehr funktionierten. Gefragt, ob es ein Fehler sei.

Sebastien antwortete:„Nein, das ist kein Fehler! Es ist eine dokumentierte Verhaltensänderung in allen nachfolgenden Versionen des Treibers.“ und schlug die Verwendung von ?useOldAliasMetadataBehavior=true vor , unter Berufung auf Dokumentation für den JDBC-Treiber .

Vorbehalt Lector: Die Dokumentation für den JDBC-Treiber besagt, dass

Ich hatte noch nicht die Zeit, vollständig zu recherchieren, was das bedeutet. Mit anderen Worten, ich weiß nicht, welche Auswirkungen die Verwendung von useOldAliasMetadataBehavior=true hat sind. Benutzung auf eigene Gefahr. Hat jemand anderes mehr Informationen?