给定 2 个远程表(在本例中用 tbl_lazy
模拟)
library("dplyr")
library("dbplyr")
t1 <- tbl_lazy(df = iris, src = dbplyr::simulate_mysql())
t2 <- tbl_lazy(df = mtcars, src = dbplyr::simulate_mysql())
如何使用 在 t1 和 t2 之间执行实际*交叉连接R 和 dbplyr ?
* 即使用
CROSS JOIN
在翻译的 SQL 查询中请注意,我知道如何执行所有其他类型的连接,这正是关于 CROSS 连接。
我知道以下技巧:
joined <- t1 %>%
mutate(tmp = 1) %>%
full_join(mutate(t2, tmp = 1), by = "tmp") %>%
select(-tmp)
然而
CROSS JOIN
.使用 show_query(joined)
显示生成的 SQL 查询使用 LEFT JOIN
. 可悲的是,没有
cross_join
运算符(operator)在 dplyr
和 sql_join(t1, t2, type = "cross")
也不起作用(未为 tbl
实现,仅适用于数据库连接)。如何生成 SQL
CROSS JOIN
用 dbplyr?
最佳答案
根据 dbplyr
NEWS file , 自 1.10 版起,如果您使用 full_join(..., by = character())
,它将“促进”连接到交叉连接。这似乎还没有在其他任何地方记录,而是搜索 dbplyr Github repo for "cross"在代码和新闻文件中都打开了它。
这种语法似乎不适用于本地数据框,只能通过 SQL。
关于sql - 使用 dbplyr 生成 CROSS JOIN 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57061921/