我想从一个带有动态筛选器的 SQL 服务器中提取一些数据。我正在使用优秀的 R 包 dplyr,方式如下:
#Create the filter
filter_criteria = ~ column1 %in% some_vector
#Connect to the database
connection <- src_mysql(dbname <- "mydbname",
user <- "myusername",
password <- "mypwd",
host <- "myhost")
#Get data
data <- connection %>%
tbl("mytable") %>% #Specify which table
filter_(.dots = filter_criteria) %>% #non standard evaluation filter
collect() #Pull data
这段代码运行良好,但现在我想以某种方式对我的表格中的所有列进行循环,因此我想将过滤器编写为:
#Dynamic filter
i <- 2 #With a loop on this i for instance
which_column <- paste0("column",i)
filter_criteria <- ~ which_column %in% some_vector
然后使用更新后的筛选器重新应用第一段代码。
不幸的是,这种方法并没有给出预期的结果。实际上,它不会产生任何错误,但也不会将任何结果提取到R中。 特别是,我稍微查看了一下由这两个代码片段生成的SQL查询,发现有一个重要的区别。
有效的第一段代码生成的查询形式为:
SELECT ... FROM ... WHERE
`column1` IN ....
(`在列名中的符号),第二个生成以下格式的查询:
SELECT ... FROM ... WHERE
'column1' IN ....
(在列名中的“'”符号)
有人有关于如何制定筛选条件使其起作用的建议吗?