我正在运行一个基于存储在R列表中的ID的自动列表的postgreSQL查询。我试图确定如何将R列表包含在我的查询中,这样我就不必每次运行查询时都对ID进行硬编码。
例如,我有一个生成列表的脚本
id <- c("001","002","003")我的查询如下所示:
SELECT *
FROM my_query
WHERE my_query.id_col IN ('001', '002', '003')我使用Rpostgres运行:
library(Rpostgres)
snappConnection <- DBI::dbConnect(RPostgres::Postgres(),
host = "host",
dbname = "dbname",
user = "user",
password = "pword",
port = 0000)
core.data <- dbGetQuery(conn = snappConnection,statement = SELECT * FROM my_query WHERE my_query.id_col IN ('001', '002', '003'))是否有方法从我的查询中引用我的"id“列表,以便当"id”更新到新值时,该查询也会更新到这些新值?
发布于 2022-02-14 20:34:02
来自胶水包的glue_sql应该可以工作:
query <- glue::glue_sql("
SELECT *
FROM my_query
WHERE my_query.id_col IN ({id*})
", .con = snappConnection)
core.data <- dbGetQuery(conn = snappConnection, statement = query)发布于 2022-02-14 22:00:58
@戴夫-爱迪生的回答解决了我的问题。在尝试他的方法的同时,我也让它发挥作用。
我将下面的查询保存为"my_query.sql“
SELECT *
FROM my_query
WHERE my_query.id_col IN ('string_to_replace')然后创建一个字符串并在字符串上使用gsub。
library(tidyverse)
temp.script <- read_file("my_query.sql")
core.data.script <- gsub('string_to_replace',paste0(id,collapse = "', '"),temp.script)从那里开始,我就像上面那样运行了我的RPostgres脚本。
https://stackoverflow.com/questions/71117829
复制相似问题