Поскольку я считаю, что драйверы R DBI еще не реализовали поддержку нескольких операторов SQL, dbGetQuery
возвращает только первое утверждение.
Следовательно, вам нужно итеративно запустить sqlcmd для нескольких операторов SQL, например, с 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)
В качестве альтернативы используйте UNION
или UNION ALL
для одного оператора SQL.
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)