I'm looking for a way to include data from an R
dataframe in a sql predicate. Ideally, I'd like to use dbSendQuery
from the RMySQL
package to send a query to my database that contains a WHERE ... IN
conditions that includes values from my database. Is this possible?
BUR
LAX
LGB
SELECT * FROM table WHERE airport IN ('BUR', 'LAX', 'LGB')
Is there a way to "pass" the rows of my data frame to a query? This might not be possible, but I'm interested to know.
I typically create a "format" string, then sub in the values using sprintf
and paste
like below:
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")
If you have to do it a lot, just wrap the messy part in a function:
someFunc <- function(x) paste0("\"", x, "\"", collapse = ",")
qstring <- sprintf(qformat, someFunc(vals))
If you're worried about SQL injection take a look at ?dbEscapeStrings
.