RODBC 在 sqlQuery() 的连接中使用 Data.Frame

Posted

技术标签:

【中文标题】RODBC 在 sqlQuery() 的连接中使用 Data.Frame【英文标题】:RODBC using Data.Frame in a Join on sqlQuery() 【发布时间】:2015-05-01 15:56:28 【问题描述】:

有没有办法使用 sqlQuery() 在 JOIN 条件下使用 data.frame?

我正在使用 RODBC 连接到 SQL 服务器,并且需要针对我已经在 R 中获得的 data.frame 限制初始结果集,因此它只返回 200,000 条记录中的 4000 条记录。有点像....

My_Data<- as.data.frame(c(1,2,3,4,5,6,7,8))

my_Query<- paste("SELECT * FROM foo INNER JOIN ",My_Data,"ON foo.x  = My_Data.x", sep="")

my_Answer<- sqlQuery(Connection, my_Query)

我可以通过将整个表拉到 R 中然后删除我不需要的数据来做到这一点,但必须有办法做到这一点。我在 FOR 循环中一次尝试了一个,但它比拉整个表花费的时间更长。

My_Data<- as.data.frame(c(1,2,3,4,5,6,7,8))

my_DF <- data.frame()
for(i in 1:length(my_DF))
  a<- paste(my_Query,my_DF[i])
  b<- sqlQuery(Connection,a)
  my_DF<- rbind(my_DF, b)


print(my_DF)

【问题讨论】:

【参考方案1】:

要通过RODBC 在 SQL 查询中引用 R 数据,您的选择是:

    将 SQL 数据读入 R,然后在那里进行操作 使用 paste 或类似命令将 R 数据帧的相关内容打印到 SQL 查询中 首先将 R 数据帧的相关部分传递到临时或永久表中的 SQL 中,然后使用 SQL 对其进行联接

对于#2join 不是合适的 SQL 操作,因为您传递的是字符串而不是表。尝试使用wherein 和类似的子句,它们将作用于查询中的一串名称而不是表。

【讨论】:

以上是关于RODBC 在 sqlQuery() 的连接中使用 Data.Frame的主要内容,如果未能解决你的问题,请参考以下文章

RODBC-一个sqlQuery()调用中的多个表[重复]

如何让 sum 函数在 RODBC 中的 SQLquery 中工作

R RDB 使用 RODBC 连接查询日期

来自 RODBC 的 sqlQuery 上的 parlapply

RODBC sqlQuery() 在应该返回 varchar(MAX) 时返回 varchar(255)

如果请求 18 行或更多行,为啥使用 RODBC 来自 SAP HANA 的 sqlQuery 不返回数据