如何在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对象放入查询中以获取我的信息?
答案 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' )"
如果你有大量的密钥,你可以先将它们放在数据库表中(检查dbWriteTable
或sqlSave
)并直接在数据库查询中约束密钥。
答案 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非常大,您可能会遇到问题