Значения столбца r в sql, где заявление
У меня есть набор данных, и я пытаюсь передать содержимое определенного столбца в оператор SQL, где.
Например, если предположить, что радужная оболочка - мой набор данных
data(iris)
head(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
5.1 3.5 1.4 0.2 setosa
4.9 3.0 1.4 0.2 setosa
4.7 3.2 1.3 0.2 setosa
4.6 3.1 1.5 0.2 setosa
5.0 3.6 1.4 0.2 setosa
5.4 3.9 1.7 0.4 setosa
Я хочу передать содержимое столбца Species {setosa, setosa, setosa.....setosa} в мой запрос sql where
sqlQuery(abcd, paste("Select * from TestTableName1
where WHERE DESCRIPTION
IN (values of Species column from r dataframe)");
Нужна помощь здесь
2 ответа
Ваш вопрос действительно о манипуляции со строками (случайно, что ваша строка будет в конечном итоге передана sqldf
), и ответ в том, что вы вставляете его вместе или используете sprintf
если вы чувствуете себя модно:
vals = paste(levels(iris$Species), collapse = ", ")
vals
## [1] "setosa, versicolor, virginica"
vals.paren = paste0("(", vals, ")")
qry = paste("select * from table where description in ", vals.paren)
qry
## [1] "select * from table where description in (setosa, versicolor, virginica)"
# sprintf makes the bounding parentheses cleaner
qry = sprintf("select * from table where description in (%s)", vals)
qry
## [1] "select * from table where description in (setosa, versicolor, virginica)"
Представляя любой вызов функции с fn$
из пакета пакета gsubfn включена интерполяция по его аргументам. Увидеть ?fn
для получения дополнительной информации. Это часто используется с sqldf
в пакете sqldf, но может использоваться с любой функцией, как показано здесь. В частности вставка $variable
в строковый аргумент вызова функции подставляет значение этой переменной в эту строку:
library(gsubfn)
lvls <- toString(shQuote(levels(iris$Species)))
fn$sqlQuery(abcd, "select * from TestTableName1 where DESCRIPTION in ($lvls)")
или если мы хотим сначала проверить строку:
sql <- fn$identity("select * from TestTableName1 where DESCRIPTION in ($lvls)")
cat(sql, "\n") # look at sql string
sqlQuery(abcd, sql)
Выход из cat
утверждение является:
select * from TestTableName1 where DESCRIPTION in ("setosa", "versicolor", "virginica")