frame/join
src/frame/join.tur
defn
inner-join
(inner-join [l :int r :int left-keys :int right-keys :int] :int)
standard inner join. Since: FR6
defn
left-join
(left-join [l :int r :int left-keys :int right-keys :int] :int)
keep all left rows; unmatched right is null. Since: FR6
defn
right-join
(right-join [l :int r :int left-keys :int right-keys :int] :int)
keep all right rows; unmatched left is null. Since: FR6
defn
full-join
(full-join [l :int r :int left-keys :int right-keys :int] :int)
keep all rows from both sides. Since: FR6
defn
semi-join
(semi-join [l :int r :int left-keys :int right-keys :int] :int)
left rows that have at least one matching right row;
defn
anti-join
(anti-join [l :int r :int left-keys :int right-keys :int] :int)
left rows that have NO matching right row. Since: FR6
defn
cross-join
(cross-join [l :int r :int] :int)
cartesian product. No keys; output is n_left * n_right rows.
Since: FR6
defn
join
(join [l :int r :int how :cstr keys :int] :int)
Since: FR6
Internal definitions
__j-nil__j-cons__j-list-length__j-list-nth-cstr__j-list-nth-int__j-list-has?__j-list-has-cstr?__j-match-- run the chosen join type and return a __join_result handle.__j-result-count__j-result-left__j-result-right__j-result-free__j-take-nullable-- build a new column by indexing into `col` with the__j-names-to-ixs__j-clone-field-at__j-build-side-cols__j-build-side-fields__j-right-nonkey-ixs__j-build-right-cols__j-suffix__j-cstr-as-int__j-build-right-fields__j-left-names__j-list-concat__j-assemble__j-keyed-join__j-cross-right-fields__j-cross-result__j-how-tag-- convenience: same key columns on both sides.