小编典典

带动态字符串的R dbGetQuery

sql

我的数据如下所示:

Id <- c(34, 22, 86)
sqlcmd <- paste("select col1, col2 from DB where ItemId =", Id, sep="")
Df <- dbGetQuery(conn, sqlcmd)

sqlcmd给我一个字符串列表作为

"select col1, col2 from DB where STOREID =34"
"select col1, col2 from DB where STOREID =22"
"select col1, col2 from DB where STOREID =86"

但是,当我传递sqlcmd给时dbGetQuery,它仅返回带有的数据ItemId = 34,这是Id列表中的第一个元素。

我想知道是否有人对此有何想法?任何帮助,将不胜感激!


阅读 144

收藏
2021-04-28

共1个答案

小编典典

由于我相信R DBI驱动程序尚未实现多个SQL语句支持,因此dbGetQuery仅返回第一条语句。

因此,您需要为多个SQL语句迭代运行 sqlcmd ,例如使用withlapply返回数据帧列表,然后rbind调用单个主数据帧:

Id <- c(34, 22, 86)
sqlcmd <- paste("select col1, col2 from DB where ItemId =", Id, sep="")

# LIST OF DATAFRAMES
df_list <- lapply(sqlcmd , function(x) dbGetQuery(conn, x))

# FINAL DATAFRAME
final_df <- do.call(rbind, df_list)

或者,对一个SQL语句使用UNIONUNION ALL

Id <- c(34, 22, 86)
sqlcmd <- paste("select col1, col2 from DB where ItemId =", Id, sep="")

single_sql <- paste(sqlcmd, collapse = " UNION ")
final_df <- dbGetQuery(conn, single_sql)

或仍使用OR

single_sql <- paste("select col1, col2 from DB where ItemId =", 
                    paste(Id, collapse=" OR ItemId = "))

final_df <- dbGetQuery(conn, single_sql)
2021-04-28