gpt4 book ai didi

sql - R RODBC 将数字列表放入 IN() 语句

转载 作者:行者123 更新时间:2023-12-04 17:39:04 24 4
gpt4 key购买 nike

我看过'Pass R variable to RODBC's sqlQuery with multiple entries? ' 已经但似乎无法让它发挥作用。我正在尝试做 sqlQuery()来自 SQL Server 2008 R2 db 上的 R。我正在尝试根据行号从大型数据库中获取样本。首先,我创建了一个随机数列表:

sampRowNum <- sample(seq(1,100000,1), 5000)

然后我尝试在查询中使用这些数字:
query1 <- sqlQuery(channel, paste("select *      
FROM db where row_id in (", sampRowNum,")", sep=""))

我只从 row_id 所在的数据库中得到结果。等于 sampRowNum 中的第一个数字.有什么建议么?

最佳答案

你不是 paste将您的查询正确地组合在一起。

如果您运行 paste单独声明,你会看到你得到一个长度为 5000 的向量,所以 sqlQuery只执行其中的第一个,对应于 samRowNum 中的第一个元素.

你想要做的是更像这样的事情:

paste("select * FROM db where row_id in (", 
paste(sampRowNum,collapse = ","),")", sep="")

就像一个补充说明(因为我不得不做很多这样的事情......)使用 IN 构建 sql 查询带有字符串的子句有点麻烦,因为您必须添加所有单引号:
vec <- letters[1:5]

paste("SELECT * FROM db WHERE col IN ('",
paste(vec,collapse = "','"),"')",sep = "")

[1] "SELECT * FROM db WHERE col IN ('a','b','c','d','e')"

如果你经常这样做,你最终会编写一个小函数来为你粘贴字符向量。

与往常一样,如果您正在处理用户输入(例如在 Web 应用程序中),由于 SQL 注入(inject)攻击,这种 SQL 字符串操作并不好。在我的特殊情况下,这并不是什么大问题,但一般来说,如果您对输入值没有太多控制权,人们会更喜欢参数化查询。

关于sql - R RODBC 将数字列表放入 IN() 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8639221/

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