我想选择表中具有特定字段属性的所有行。即该字段是已知的十万个字符串之一。
我正在使用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中重复该字符串,则查询中需要有重复的记录。
答案 0 :(得分:1)
根据Blue Magister的思路,您可能应该有一个表格,其中包含所有这些“已知”字符串。然后,您可以在查询中加入该表,以过滤掉您的结果。
答案 1 :(得分:1)
如果您有权在数据库中创建临时表,则可以使用所有字符串填充它,然后在选择行时加入它。如果它比它更永久,也许你可以创建表并管理数据库中的字符串而不是R。
答案 2 :(得分:0)
最好的方法是:
然后A)使用这些表创建一个新的连接查询,或者B)使用带有立即列表的"IN clause",如下所示:
query <- paste('select * from my_table where blah1=',paste(my_samp,collapse=' OR ',paste(' in (str1, str2, str3, str4)',sep=''),sep=''),sep='')