首页 > 解决方案 > R vs SQL - 仅从数据库加载一些数据

问题描述

我正在将此代码用于仅加载我的 df 中的 id。

library(dplyr)

tbl(conn, "table") %>%
  filter(idvar %in% df$id) %>%
  select(var1, var2, var3) %>%
  collect()

问题是如何将其与加入和其他标准(如下面的代码)一起使用,但仍然只加载匹配的 id - 我的数据库中有数百万个 id,但我的 df 中只有数百个。

SELECT * 
FROM table
LEFT JOIN table2 on table2.id = table.id
WHERE date > "2010-01-01" and column3 is not null

标签: sqlrdplyr

解决方案


希望这可以帮助您解决一些问题。
我尝试过类似的场景,它对我有用。注意:我没有尝试使用 dplyr。我使用 My-SQL 作为 db 和DBI & pool是 R 包。

library(DBI)
library(pool)
pool <- dbPool(drv = RMySQL::MySQL(),dbname = "db_name",host = "host_name",username = "User_name", password = "password", port = 3306, unix.sock = "/path/to/mysqld/mysqld.sock") 

在上面的行中,unix.sock我给出了 My_SQL 套接字路径,因为没有它我遇到了问题。获取套接字路径: mysql_config --socket(ubuntu)

users <- lapply(df$id, function(x){
  dbGetQuery(pool, paste0("SELECT * FROM table LEFT JOIN table2 on table2.id = table.id 
                          WHERE table.user_id IN('", x,"');" ))
})

请根据您的要求编辑 SQL 查询直到WHERE条件。它从数据库中获取列表。根据您的要求处理该列表。


推荐阅读