minus
left.minus(right)left.minus(right)Problem
Section titled “Problem”Given two relations with the same heading, remove all of the tuples in one from the other.
Example: I want all the products except those in the list of discontinued products.
Description
Section titled “Description”The set difference of two relations. The result contains those tuples that are in left but not in right.
The result’s heading is identical with that of the inputs’.
Requirements
Section titled “Requirements”The headings of the two relations must be identical.
Example
Section titled “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: 20, quantity: 1 }]Generated SQL
Section titled “Generated SQL”SELECT `t1`.`product_id`, `t1`.`quantity`FROM `my_purchases` AS 't1'EXCEPTSELECT `t1`.`product_id`, `t1`.`quantity`FROM `your_purchases` AS 't1'const myPurchases = Bmg([ { product_id: 10, quantity: 2 }, { product_id: 10, quantity: 4 }, { product_id: 20, quantity: 1 },])
const yourPurchases = Bmg([ { product_id: 10, quantity: 2 }, { product_id: 10, quantity: 4 }, { product_id: 20, quantity: 5 }, { product_id: 30, quantity: 1 },])
myPurchases.minus(yourPurchases).toArray()
// =>// [{ product_id: 20, quantity: 1 }]