This postThis post,我有一种编写rsqlite动态命令的方法。但是,它对我不起作用。我的数据如下所示:

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是列表中的第一个元素。

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

最佳答案

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

因此,您需要针对多个SQL语句(例如,使用lapply迭代地运行sqlcmd)以返回数据帧列表,然后对单个主数据帧进行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)

关于sql - 带动态字符串的R dbGetQuery,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50767089/

10-09 01:56