1

我想选择表中具有特定字段属性的所有行。即该字段是已知的十万个字符串之一。

我正在使用 R 发送查询。所以我有如下代码:

my_samp <- sample(unique_ids, replace=T, size=10^6)  
my_conn <- dbConnect(MySQL(),user='me',dbname='my_db')
query <- paste('SELECT blah1, blah2,...,blah900 FROM my_table WHERE      blah1=',paste(my_samp,collapse=' OR ',sep=''),sep='')
res1 <- dbSendQuery(my_conn, query)
my_data <- fetch(res1,n=-1)
dbDisconnect(my_conn)

但是,我担心 R 解释器或 mysql 无法正确处理该字符串。我也怀疑这是低效的。有更清洁的解决方案吗?

我无法使用 dbReadTable 将整个表直接读入 R,因为它太大了。

我计划通过分叉过程来完成数千次 - 统计引导。

如果字符串在 my_samp 中重复,则查询中需要有重复记录。

4

3 回答 3

1

根据 Blue Magister 的思路,您可能应该有一个表,其中存储了所有这些“已知”字符串。然后,您可以在查询中加入该表以过滤掉您的结果。

于 2012-08-20T23:08:25.300 回答
1

如果您有权在数据库中创建临时表,则可以使用所有字符串填充它,然后在选择行时加入它。如果它比这更永久,也许您可​​以创建表并管理数据库内部的字符串而不是 R。

于 2012-08-20T23:09:54.433 回答
0

最好的方法是:

  1. A)创建一个创建已知字符串列表的子查询或 B)将已知字符串插入数据库的表中
  2. 然后 A) 使用这些表创建一个新的连接查询或 B) 使用带有立即列表的“IN 子句” ,如下所示:

    query <- paste('select * from my_table where blah1=',paste(my_samp,collapse=' OR ',paste(' in (str1, str2, str3, str4)',sep=''),sep=''),sep='')
    
于 2012-08-20T23:07:32.800 回答