我有一个包含20000个ID的变量x。我想编写一个像
这样的SQL查询select * from tablename where ID in x;
我试图在R中实现它,我只能获取x变量中的ID值。以下是我的尝试,
dbSendQuery(mydb, "select * from tablename where ID in ('$x') ")
尝试此操作时我没有收到任何错误。但它返回0值。
接下来尝试使用
sprintf("select * from tablename where ID in %s",x)
但这会产生20000个单独的查询,这可能会导致数据库成本高昂。
有人可以建议我编写一个命令的方法,它会循环遍历x中的ID并在单个查询中保存到R中的Dataframe吗?
答案 0 :(得分:2)
您需要在实际字符串中包含代码。以下是我使用gsub
x <- LETTERS[1:3]
sql <- "select * from tablename where ID in X_ID_CODES "
x_codes <- paste0("('", paste(x, collapse="','"), "')")
sql <- gsub("X_ID_CODES", x_codes, sql)
# see new output
cat(sql)
select * from tablename where ID in ('A','B','C')
# then submit the query
#dbSendQuery(mydb, sql)
答案 1 :(得分:1)
粘贴它怎么样:
dbSendQuery(mydb, paste("select * from tablename where ID in (", paste(x, collapse = ","), ")"))