内连接clojure [英] Inner-join in clojure

查看:104
本文介绍了内连接clojure的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

假设我有

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

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

当我做一个(clojure.set / join test-left test-right)我得到一个笛卡尔积。 12行。我想要的是inner-join on:left =:right的所有者,所以我只得到那些在右侧有匹配行的结果

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

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

任何想法。同样想实现左和右外部联接,但这是separete问题。我正在学习clojure,请与我一起。

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

这篇关于内连接clojure的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆