我正在寻找一种在sql谓词中包含来自R
数据帧的数据的方法。理想情况下,我想使用dbSendQuery
包中的RMySQL
向我的数据库发送查询,该查询包含WHERE ... IN
条件,其中包含来自我的数据库的值。这可能吗?
BUR
LAX
LGB
SELECT * FROM table WHERE airport IN ('BUR', 'LAX', 'LGB')
有没有办法将我的数据框的行“传递”到查询?这可能是不可能的,但我很想知道。
答案 0 :(得分:-1)
我通常创建一种"格式"字符串,然后使用sprintf
和paste
如下所示在值中
qformat <- "SELECT * FROM table WHERE airport IN (%s)"
vals <- c("BUR", "LAX", "LGB")
qstring <- sprintf(qformat, paste0("\"", vals, "\"", collapse = ","))
cat(qstring)
# SELECT * FROM table WHERE airport IN ("BUR","LAX","LGB")
如果你必须做很多事情,只需将凌乱的部分包裹在一个函数中:
someFunc <- function(x) paste0("\"", x, "\"", collapse = ",")
qstring <- sprintf(qformat, someFunc(vals))
如果您担心SQL注入,请查看?dbEscapeStrings
。