RODBC 包:数据库中的 Select 行 table 匹配 R 向量中的值

RODBC-Package: Select rows in a database table that match values in an R-vector

我在一个 R 向量 (ids) 和一个包含列名 "IDnr"、"V1" 和 "V2" 以及大约 1.6 Mio 行。

我想要 select 行 dbo.datafromhell 中的 ID 号 (IDnr) 与 "ids"

中的值相匹配
ids <- c(1,2,3,4) #in real: 150'000 id-numbers

我尝试使用 "where-in-list" 语句进行以下查询,但它占用了大量资源并因错误而终止:

df <- sqlQuery(mycon, paste("SELECT * FROM dbo.datafromhell WHERE IDnr IN (",paste(ids,sep="",collapse=","),")"))

我想我的值列表 (ids) 对于 "where-in-list" 语句来说太大了。

最后我想要一个数据框,它只包含值列表和数据库之间具有匹配 ID 的行 table:

 IDnr V1    V2
    1  A  TRUE
    2  B FALSE
    3  C  TRUE
    4  D FALSE

#in real: about 150'000 rows (different IDnr)

我还尝试编写一个将数据库 table 直接连接到我的值列表的 sqlQuery。但我想不通。

非常感谢任何帮助!

禁食选项是将 150.000 个 ID 保存到数据库中的暂存 table,然后在两个 table 上创建查询。

一个(缓慢的)解决方法是将您的 ids 分成大小可控的块,运行 对每个块进行查询,rbind 所有结果。像这样:

#define how big is manageable
manSize<-1000
do.call(rbind,
        lapply(split(ids,seq_along(ids)%/%manSize), 
              function(x) sqlQuery(mycon, paste("SELECT * FROM dbo.datafromhell WHERE IDnr IN (",paste(x,sep="",collapse=","),")"))))