在DBgetquery中使用R对象

时间:2017-03-06 07:50:02

标签: sql r

如何在DBgetquery中使用R对象?

示例

我在R中选择了一些id作为topIds topIds = C( 'A', 'B', 'C' ......)

我想查询这些topID的详细信息

query =dbgetquery(conn, " SELECT AGE , NAME  
                          FROM table 1
                          where ID= paste0('topIds') )

如何将topIds R对象放入查询中以获取我的信息?

2 个答案:

答案 0 :(得分:2)

有关变量的简短列表(在Oracle中少于1000个密钥),您可以使用paste

对于带分隔符,

的数字键简单粘贴
> numLst <- c(1,2,3)
> paste('select * from T where id in (',paste(numLst, collapse=','),')')
[1] "select * from T where id in ( 1,2,3 )"

对于字符键,您必须另外引用字符串:

> charLst <- c('a','b','c')
> quotedLst <- mapply(paste0, "'", charLst, "'")
> paste('select * from T where id in (',paste(quotedLst, sep="'", collapse=','),')')
[1] "select * from T where id in ( 'a','b','c' )"

如果你有大量的密钥,你可以先将它们放在数据库表中(检查dbWriteTablesqlSave)并直接在数据库查询中约束密钥。

答案 1 :(得分:0)

您需要折叠topIds并将其粘贴到查询中,如下所示

ids_for_query <- paste0(topIds, collapse = ',')
query <- paste0("SELECT AGE , NAME
FROM table 1 where ID IN(", ids_for_query, ")", sep = '')

如果topids非常大,您可能会遇到问题