Natknąłem się na ten sam frustrujący problem. Czasami AS
słowo kluczowe miałoby zamierzony skutek, ale innym razem nie. Nie udało mi się określić warunków, aby działała poprawnie.
Krótka odpowiedź: (Podziękowania dla Simona Urbanka (opiekuna pakietu dla RJDBC), Yev i Sebastien! Zobacz Długa odpowiedź. ) Jedną rzeczą, którą możesz spróbować, jest otwarcie połączenia JDBC za pomocą ?useOldAliasMetadataBehavior=true
w ciągu połączenia. Przykład:
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)
Skończyło się na tym, że dla mnie zadziałało! Zobacz więcej szczegółów, w tym zastrzeżenia, w Długiej odpowiedzi.
Długa odpowiedź: Próbowałem różnych rzeczy, w tym tworzenia widoków, zmieniania zapytań, używania instrukcji JOIN, NIE używania instrukcji JOIN, używania instrukcji ORDER BY i GROUP BY itp. Nigdy nie byłem w stanie zrozumieć, dlaczego niektóre z moich zapytań były w stanie zmienić nazwy kolumn a inni nie.
Skontaktowałem się z opiekunem pakietu (Simon Urbanek). Oto, co powiedział:
Następnie zalecił, abym upewnił się, że mam najnowszy sterownik JDBC dla MySQL. Miałem najnowszą wersję. Jednak skłoniło mnie to do myślenia „może JEST to błąd ze sterownikiem JDBC”. Poszukałem więc w Google:mysql jdbc driver bug alias
.
Najlepszym wynikiem tego zapytania był wpis na bugs.mysql.com . Yev, używający MySQL 5.1.22, mówi, że po aktualizacji sterownika z wersji 5.0.4 do 5.1.5 jego aliasy kolumn przestały działać. Zapytany, czy to błąd.
Sebastien odpowiedział:„Nie, to nie jest błąd! To udokumentowana zmiana zachowania we wszystkich kolejnych wersjach sterownika”. i zasugerował użycie ?useOldAliasMetadataBehavior=true
, powołując się na dokumentację sterownika JDBC
.
Lektor zastrzeżeń: Dokumentacja sterownika JDBC stwierdza, że
Nie miałem czasu, aby w pełni zbadać, co to oznacza. Innymi słowy, nie wiem, jakie są wszystkie konsekwencje używania useOldAliasMetadataBehavior=true
są. Używaj na własne ryzyko. Czy ktoś inny ma więcej informacji?