Inner join in clojure

Say I have

(def test-left [{:name "Sean" :age 27} {:name "Ross" :age 27} {:name "Brian" :age 22}]) 

and

 (def test-right [{:owner "Sean" :item "Beer"} {:owner "Sean" :item "Pizza"} {:owner "Ross" :item "Computer"} {:owner "Matt" :item "Bike"}]) 

When I do a (clojure.set/join test-left test-right) , I get a Cartesian product. 12 rows. What I want is Inner-join on: name left =: owner of the right, to get only those results that have the corresponding rows on the right side

So i get

  [{:name "Sean" :age 27 :item "Beer" } {:name "Sean" :age 27 :item "Pizza" } {:name "Ross" :age 27 :item "Computer"}] 

Any ideas. Similarly, I would like to get the left and right outer joins, but this is a separate issue. I learn clojure, so please carry me

+8
clojure
source share
1 answer

Got it. My bad

 1:24 main-hta=> (clojure.set/join test-left test-right {:name :owner}) 

gets

 #{{:item "Pizza", :owner "Sean", :name "Sean", :age 27} {:item "Beer", :owner "Sean", :name "Sean", :age 27} {:item "Computer", :owner "Ross", :name "Ross", :ag e 27}} 
+8
source share

All Articles