当前位置: 首页 > 面试题库 >

带动态字符串的R dbGetQuery

吕越彬
2023-03-14
问题内容

我的数据如下所示:

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 ,例如使用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)


 类似资料:
  • Sds (Simple Dynamic String,简单动态字符串)是 Redis 底层所使用的字符串表示, 几乎所有的 Redis 模块中都用了 sds。 本章将对 sds 的实现、性能和功能等方面进行介绍, 并说明 Redis 使用 sds 而不是传统 C 字符串的原因。 sds 的用途 Sds 在 Redis 中的主要作用有以下两个: 实现字符串对象(StringObject); 在 Re

  • 如果我有3个字符串变量string1 string2和string3,并且根据用户输入,其中一些变量可能是空的,我该怎么做?我想将这些变量与我已经设置的另外3个变量进行比较,除非相应的字符串(string1/string2/string3)输入为空 这个想法是这样的: 如果没有一个是空的,那么: 如果s1是唯一一个空的,那么我们只比较其他2个: 因此,如果输入的字符串为空,程序将不会检查该变量是否

  • 问题内容: 如果我想使格式化后的字符串动态可调,则可以从 至 但是,这里的字符串连接似乎很麻烦。还有其他简化方法吗? 问题答案: 您可以从参数列表中获取填充值: 您甚至可以动态插入填充值:

  • 问题内容: 我想编写一个具有动态创建的文档字符串的python函数。从本质上讲,对于一个函数,我想成为一个调用自定义函数的描述符,根据要求创建文档字符串。然后应返回动态生成的文档字符串。 这里的上下文是编写一个Python包,在现有的分析包中包装大量命令行工具。每个工具都变成了一个类似命名的模块函数(通过函数工厂创建并插入到模块名称空间中),其中函数文档和接口参数是通过分析包动态生成的。 问题答案

  • 问题内容: 我在SQL Server中有两个表:客户和地址 客户表 : 地址表 : 这是我需要的输出: 这是我的查询,但没有得到正确的结果: 这是我得到的结果: 如您所见,客户1在最终结果中出现了两次。每个客户只能获得一行吗? 我查看了这个示例,但没有帮助:http://stackoverflow.com/questions/6267660/sql-query-to- convert-rows-i

  • 问题内容: 我对String串联感到困惑。 输出为: 50abc20 50abc1010 我想知道为什么在两种情况下都将 20 + 30 加在一起,但是 10 + 10 需要加上括号(s1)而不是串联到String(s2)。请在此处说明String运算符的工作方式。 问题答案: 加法保持关联。以第一种情况 在第二种情况下: