Inner-join in clojure

允我心安 提交于 2020-01-23 05:24:12

问题


Lets 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 of left = :owner of right so that I get only those result which have matching rows in 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 Would like to achieve left and right outer joins but that is separete question. I am learning clojure so please bear with me


回答1:


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}}


来源:https://stackoverflow.com/questions/6695189/inner-join-in-clojure

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!