dbplyr
dbplyr copied to clipboard
Inline `filter()` in `semi/anti_join()`
library(dplyr, warn.conflicts = FALSE)
library(dbplyr, warn.conflicts = FALSE)
lf <- lazy_frame(x = 1, y = 2, z = 3)
lf2 <- lazy_frame(x = 1, a = 2, b = 3)
semi_join(
lf,
lf2 %>%
filter(a == 1),
by = "x"
)
Currently produces
SELECT *
FROM `df` AS `LHS`
WHERE EXISTS (
SELECT 1 FROM (
SELECT *
FROM `df`
WHERE (`a` = 1.0)
) `RHS`
WHERE (`LHS`.`x` = `RHS`.`x`)
)
But could be
SELECT *
FROM `df` AS `LHS`
WHERE EXISTS (
SELECT 1 FROM
FROM `df` AS `RHS`
WHERE (`RHS`.`a` = 1.0) AND (`LHS`.`x` = `RHS`.`x`)
)