What would the following syntax feel like?
inner_join(one_from(lhs), one_from(rhs)) # relationship = "one-to-one"
left_join(one_from(lhs), rhs) # relationship = "one-to-many"
full_join(lhs, one_from(rhs)) # relationship = "many-to-one"
inner_join(many_from(lhs), many_from(rhs)) # relationship = "many-to-many"
The functions would merely add a class that dplyr/duckplyr could react upon, each in their own unique way.
We could also explore extending the powerjoin package, CC @moodymudskipper.