Учитывая 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
.
К сожалению, в dplyr
нет оператора cross_join
, и sql_join(t1, t2, type = "cross")
тоже не работает (не реализовано для tbl
s, работает только для соединений с БД).
Как я могу сгенерировать CROSS JOIN
SQL с помощью dbplyr?