如何在for循环中执行SQL查询并将查询存储在表中

时间:2019-06-11 16:26:28

标签: mysql sql r

我有一个SQL数据库,其中一列ID是ID,而另一列具有每个ID的对应信息。我有一个包含ID#的向量,我想要相应的信息。如何只查询那些特定的ID,同时又获得相应的信息,并将其存储在表中?

我尝试过循环,尝试过过滤,并对其进行硬编码。

                                                                con <- dbConnect(RSQLite::SQLite(), "data.db") 
                                                            df<-                                                                                                                        tbl(con,"kv") 
                                                                    newish         <- data.frame(df)
                                                            filter(person %in% IDs) %>% 
                                                                      collect()

连接后,调用给定向量中的所有ID,并提取相应的信息并将其存储在表中

如果我厌倦了for循环,则该表将不会打印所有信息,而只会显示向量中最后一个ID的信息,因此过滤将无法进行,因为它表明向量仅必须是向量而不是90,000。实际结果应该是一个仅包含患者ID号和我在病媒中拥有的人员的相应信息的表。

1 个答案:

答案 0 :(得分:0)

这是一个SQL问题,可以使用R分解如下:

# not run
# con <- dbConnect(RSQLite::SQLite(), "data.db") 

ids <- paste0("id_", sample(1:100, 10))
id_var <- "id_var" # you can put more ids here with a corresponding data.frame in ids
vars <- paste0("var", 1:10)
db_name <- "mydatabase"
tab_name <- "mytable"
whereq <- paste("where", id_var, "in", paste0("('", paste0(ids, collapse = "', '"), "')") )

rqt <- paste("select", paste(vars, collapse = ", "),
             "from", paste0(db_name, ".", tab_name), whereq, ";")
# check the query
rqt
#> [1] "select var1, var2, var3, var4, var5, var6, var7, var8, var9, var10 from mydatabase.mytable where id_var in ('id_99', 'id_1', 'id_72', 'id_86', 'id_65', 'id_59', 'id_67', 'id_4', 'id_82', 'id_2') ;"

# to uncomment
# res <- DBI::dbGetQuery(con, rqt)
# res <- tibble::as_tibble(res) # OR data.table::data.table(res) OR as.data.frame(res)

reprex package(v0.2.1)于2019-06-11创建