sql - 使用 dbplyr 生成 CROSS JOIN 查询

标签 sql r dplyr dbplyr

给定 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)

然而
  • 这很难看(即使它可以隐藏在函数中)
  • 我想利用数据库高度优化的连接能力,所以我想传递一个真正的SQL CROSS JOIN .使用 show_query(joined)显示生成的 SQL 查询使用 LEFT JOIN .

  • 可悲的是,没有 cross_join运算符(operator)在 dplyrsql_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/

    相关文章:

    r - 将列中的独特特征转换为变量名称并将原始特征虚拟编码为 R 中的变量

    MySQL 存储过程 SELECT、三个 WHERE CLAUSE 值和 ORDER BY

    c# - 通过特定搜索从多个表中获取记录

    r - 根据条件对 data.table 分组求和

    r - 如何根据时间序列的列值提取日期?

    r - 优化 R 中的非线性 Langmuir 参数估计

    r - 改进group_by和summary的运行时间

    在 Windows 7 中启动 db2sampl 时出现 sql1205n

    sql - 如何在 postgresql 中返回日期值?

    r - 第二次使用 dplyr::do 时丢失 group_by 信息