union
left.union(right)Problem
Given two relations with the same heading, create a relation with all tuples from both relations.
Example: I want the list of all managers plus all employees.
Description
The set union of two relations. The result contains all tuples from left as well as all tuples from right.
The result’s heading is identical with that of the inputs’.
Requirements
The headings of the two relations must be identical.
Example
my_purchases = Bmg::Relation.new([ { product_id: 10, quantity: 2 }, { product_id: 10, quantity: 4 }, { product_id: 20, quantity: 1 },])
your_purchases = Bmg::Relation.new([ { product_id: 10, quantity: 2 }, { product_id: 10, quantity: 4 }, { product_id: 20, quantity: 5 }, { product_id: 30, quantity: 1 },])
my_purchases.minus(your_purchases).to_a
=>
[{ product_id: 10, quantity: 2 }, { product_id: 10, quantity: 4 }, { product_id: 20, quantity: 1 }, { product_id: 20, quantity: 5 }, { product_id: 30, quantity: 1 },]Generated SQL
SELECT `t1`.`product_id`, `t1`.`quantitiy`FROM `my_purchases` AS 't1'UNIONSELECT `t1`.`product_id`, `t1`.`quantitiy`FROM `your_purchases` AS 't1'Note that the scoping of the table alias t1 is limited to the respective SELECT clauses, which is why the same alias is used in both clauses.