Значения столбца 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") 
Другие вопросы по тегам