( Full Disclojureで有名な) Sean Devlin のtable-utilsには、次の結合タイプがあります。
- 内部結合
- 左外部結合
- 右外部結合
- 全外部結合
- 自然結合
- 交差結合
しばらく更新されていませんが、1.3、1.4、1.5 で動作します。外部依存なしで動作させるには:
fn-tuple
と置き換えますjuxt
(:use )
ns 宣言の節全体を次のように置き換えます(require [clojure.set :refer [intersection union]])
- 以下から関数 map-vals を追加します。
また
(defn map-vals
[f coll]
(into {} (map (fn [[k v]] {k (f v)}) coll)))
またはClojure 1.5以降の場合
(defn map-vals
[f coll]
(reduce-kv (fn [acc k v] (assoc acc k (f v))) {} coll))
ライブラリの使用法は、結合タイプ、2 つのコレクション (上記の例のようなマップの 2 つのセット、または 2 つの SQL 結果セット) と、少なくとも 1 つの結合 fn です。キーワードはマップ上の関数であるため、通常は結合キーのみで十分です。
=> (full-outer-join s1 s2 :a :a)
({:a 1, :c 3, :b 2}
{:a 2, :c 5, :b 3}
{:b 8, :a 3})
私の記憶が正しければ、Sean は少し前に table-utils を contrib に入れようとしましたが、うまくいきませんでした。残念なことに、独自のプロジェクト (github/clojars 上) を取得できませんでした。時々、このようなライブラリに関する質問が Stackoverflow または Clojure の Google グループに寄せられます。
もう 1 つのオプションは、datomic から clojure データ構造をクエリするためのデータログ ライブラリを使用することです。Stuart Halloway の gists にいくつかの 例があります。