我的数据如下所示:
Id <- c(34, 22, 86) sqlcmd <- paste("select col1, col2 from DB where ItemId =", Id, sep="") Df <- dbGetQuery(conn, sqlcmd)
我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列表中的第一个元素。
dbGetQuery
ItemId = 34
Id
我想知道是否有人对此有何想法?任何帮助,将不胜感激!
由于我相信R DBI驱动程序尚未实现多个SQL语句支持,因此dbGetQuery仅返回第一条语句。
因此,您需要为多个SQL语句迭代运行 sqlcmd ,例如使用withlapply返回数据帧列表,然后rbind调用单个主数据帧:
lapply
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语句使用UNION或UNION ALL。
UNION
UNION 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:
OR
single_sql <- paste("select col1, col2 from DB where ItemId =", paste(Id, collapse=" OR ItemId = ")) final_df <- dbGetQuery(conn, single_sql)