cross

cross, table creation

The cross keyword creates a table as the cartesian product of two tables. The resulting table has two primary dimensions, obtained from the primary dimensions of the left and right tables respectively.

table Products[product] = with
  [| as Product, as Price |]
  [| "shirt",  11.25 |]
  [| "pant",   25.75 |]
  [| "cap",     5.75 |]

table Colors[color] = with
  [| as Color |]
  [| "white" |]
  [| "black" |]
  [| "blue"  |]
  [| "red"   |]

table Variants = cross(Products, Colors)

show table "All variants" a1c10 with
  Variants.product
  Variants.color
  Products.Price

Advanced remark: In SQL, this mechanism is known as a cartesian join.

cross by at, table creation

The cross-by-at creates a table as the series of cartesian products from the two tables, with one cartesian product per group. The primary dimension of the new table is the concatenation of the primary dimensions of the left and right tables.

table T = with
  [| as A, as B |]
  [| "a",  1 |]
  [| "b",  1 |]
  [| "c",  2 |]
  [| "d",  2 |]

table U = with
  [| as B, as C |]
  [| 1, "x" |]
  [| 1, "y" |]
  [| 2, "z" |]

table TU = cross(T, U) by U.B at T.B
TU.A = T.A
TU.C = U.C

show table "TU" a1b10 with
  TU.A
  TU.C

Advanced remark: In SQL, this mechanism is known as an inner join.