Я столкнулся с тем же разочаровывающим вопросом.Иногда ключевое слово AS
будет иметь ожидаемый эффект, но в других случаях это не так.Мне не удалось определить условия, чтобы заставить его работать правильно.
Краткий ответ: (Спасибо Саймону Урбанеку (сопровождающему пакета для RJDBC), Еву и Себастьену! См. Длинный ответ. ) Одна вещь, которую вы можете попробовать, это открыть ваше соединение JDBC, используя ?useOldAliasMetadataBehavior=true
в строке соединения.Пример:
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)
Это сработало для меня!Более подробную информацию, включая предупреждения, можно найти в Длинном ответе.
Длинном ответе: Я перепробовал все виды вещей, включая создание представлений, изменение запросов с использованием операторов JOIN, НЕ используя операторы JOIN, операторы ORDER BY, GROUP BY и т. Д. Я так и не смог выяснить, почему некоторые мои запросы могли переименовывать столбцы, а другие - нет.
Я связался с сопровождающим пакета(Саймон Урбанек.) Вот что он сказал:
В подавляющем большинстве случаев это проблема в драйвере JBDC, потому что на самом деле RJDBC не может ничего сделать, кроме как вызвать драйвер.
Затем он порекомендовал мне убедиться, что у меня установлен самый последний драйвер JDBC для MySQL.У меня была самая последняя версия.Тем не менее, это заставило меня задуматься «возможно, это ошибка с драйвером JDBC».Итак, я искал в Google: mysql jdbc driver bug alias
.
Лучший результат для этого запроса: запись на bugs.mysql.com .Yev, используя MySQL 5.1.22, говорит, что когда он обновил драйвер с версии 5.0.4 до 5.1.5, псевдонимы его столбцов перестали работать.На вопрос, была ли это ошибка.
Себастьен ответил: «Нет, это не ошибка! Это задокументированное изменение поведения во всех последующих версиях драйвера».и предложил использовать ?useOldAliasMetadataBehavior=true
, сославшись на документацию для драйвера JDBC .
Caveat Lector: В документации для драйвера JDBC указано, что
useColumnNamesInFindColumn предпочтительнее, чем useOldAliasMetadataBehavior, если вам не требуется специфическое поведение, которое оно обеспечивает в отношении ResultSetMetadata.
У меня не было времени, чтобы полностью исследовать, что это значит.Другими словами, я не знаю, каковы все последствия использования useOldAliasMetadataBehavior=true
.Используйте на свой риск.У кого-то еще есть информация?