【问题标题】:RODBC join data frame to table in sqlQueryRODBC 将数据框连接到 sqlQuery 中的表
【发布时间】:2012-09-16 15:16:43
【问题描述】:

我一直在使用 RODBC 连接到工作中的 DB2 数据库,到目前为止一切正常。我可以通过 sqlQuery 提取表,并在将它们作为数据框返回之前连接数据库中的表。但是,我经常通过抓取和操作表,然后将它们连接回数据库来加速 SAS 中的过程。当我尝试在 R 中执行此操作时,我遇到了问题。我希望它变成这样。

library(RODBC)
channel <- odbcConnect(database stuff)
dataframe <- sqlQuery(channel, query)
.
.
manipulate data frame
. 
.
dataframe <- sqlQuery(channel, 
  "select * from dataframe as a INNER JOIN schema.table1 as b ON a.id=b.id")

问题在于 R 无法识别“数据框”。我认为它与“schema.dataframe”部分有关,因为我不确定工作区会有什么样的“模式”。有没有办法在 sqlQuery 中将数据框连接到数据库中的表?或者我可以以某种方式将数据框设为临时表并从那里加入吗?

【问题讨论】:

    标签: sql rodbc


    【解决方案1】:

    您可以将数据框作为表格保存到您的数据库中

    sqlSave(channel, dataframe)
    

    (有关选项,请参阅 ?sqlSave),然后进行查询。假设通道指向“模式”:

    dataframe <- sqlQuery(channel, 
      "select * from schema.dataframe as a INNER JOIN schema.table1 as b ON a.id=b.id")
    

    或者您可以使用 data.table() 并在 R 中进行连接:

    library(data.table)
    dataframe <- data.table(dataframe)
    setkey(dataframe, id)
    table1 <- data.table(sqlQuery(channel, 
      "select * from schema.table1")
    setkey(table1, id)
    dataframe <- dataframe[table1, nomatch=0]
    

    在这两种情况下,您最终都会得到一个“辅助”对象:第一种情况是数据库中的 schema.dataframe,第二种情况是 R 中的 table1。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-20
      • 2014-07-09
      • 2016-05-19
      • 1970-01-01
      • 1970-01-01
      • 2014-10-08
      相关资源
      最近更新 更多