给出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())
如何使用 R 和 dbplyr 在t1和t2之间执行 actual *交叉联接?
*,即在翻译后的SQL查询中使用CROSS JOIN
请注意,我知道如何执行所有其他类型的联接,这恰好与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
中没有dplyr
运算符,并且sql_join(t1, t2, type = "cross")
也无效(不适用于tbl
,仅适用于数据库连接)。
如何使用dbplyr生成SQL CROSS JOIN
?
答案 0 :(得分:2)
根据dbplyr
NEWS file,从版本1.10开始,如果您使用full_join(..., by = character())
,它将把连接“提升”为交叉连接。似乎尚未在其他任何地方对此进行记录,但是搜索dbplyr Github repo for "cross"会将其同时显示在代码和NEWS文件中。
此语法似乎仅通过SQL不适用于本地数据帧。