gpt4 book ai didi

sql - R dbGetQuery 与动态字符串

转载 作者:行者123 更新时间:2023-12-02 17:40:12 25 4
gpt4 key购买 nike

来自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 语句迭代运行 sqlcmd,例如使用 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 语句使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com