結合
2 つのノードの SQL を JOIN でつなぎます。キーの値が同じ行どうしを横に並べた 1 つのテーブルにします。
分析プロジェクトとの違い
| 見るところ | SQLビルダー | 分析プロジェクト |
|---|---|---|
| 結合タイプ | 共通部分を残す(inner join) / 左側のデータを残す(left join) の 2 種類 | inner / left / right / outer / left anti / right anti の 6 種類 |
| 左右に同じ名前の列があるとき | すべて _left / _right を付けて両方残す | 重なった列だけ _x / _y を付ける |
| 出力の列の並び | 列名で並べ替わる | 左のデータの並びが先 |
| 多対多の許可 | ない | ある |
| 条件を指定する(大小比較) | ない | ある |
右側を基準にしたいときは、左右のノードを入れ替えて「左側のデータを残す」を選んでください。
入出力
| ポート | 内容 |
|---|---|
| 左側 | データ |
| 右側 | データ |
| 出力データ | データ |
設定項目
- キー列を選択
- 左右でキー列の名前が同じかを選びます。左右のキー列名が同じが既定です。
- 列を選択必須
- 「左右のキー列名が同じ」のときに出ます。複数選べます。
- 結合設定
- 「左右のキー列名が異なる」のときに出ます。左ノードのキー列選択と右ノードのキー列選択の組を作ります。組は複数足せます。
- 結合タイプ
- 共通部分を残す(inner join)か左側のデータを残す(left join)。既定は共通部分を残す方です。
出力される列
左右の両方にある名前の列は、キー列もふくめて 2 本とも残ります。 左側のものに _left、右側のものに _right が付きます。片方にしかない列は名前が変わりません。
| 入力 | 出力 |
|---|---|
左に 顧客ID 売上、右に 顧客ID 地域 | 地域 / 売上 / 顧客ID_left / 顧客ID_right の 4 列 |
並びは元の順ではなく、列名を並べ替えた順になります。 左のデータの列が先に来るとは限らないので、順番を決めたいときはあとに列の並べ替えをつないでください。
生成される SQL
PostgreSQL につないで、左右とも customer_id をキーにした場合です。
SELECT "port_左"."amount" AS "amount", "port_右"."area" AS "area", "port_左"."customer_id" AS "customer_id_left", "port_右"."customer_id" AS "customer_id_right"FROM (SELECT "customer_id", "amount" FROM "orders") AS "port_左"INNER JOIN "customers" AS "port_右" ON "port_左"."customer_id" = "port_右"."customer_id"別名は左右の入力ポートの ID です。 実際には port_csDpjXTdYNeQWUpEmpyK のようなランダムな文字列になるので、上の例ではそれぞれ port_左 port_右 と書いています。
左側はかっこで囲んだ中の問い合わせになります。 右側がテーブルを選んだだけのノードなら、上のようにテーブル名がそのまま置かれます。右側にも処理が入っていると、右側もかっこで囲まれます。
エラーと対処
どのエラーも、設定を直してノードを実行し直せば消えます。
上流にない列が選ばれている
前のノードで列が消えたあとに実行すると出ます。
存在しない列が選択されています
直し方 — キー列を選び直してください。
入力がどちらもつながっていない
左側・右側のどちらにもノードをつないでいないと出ます。
カラムが選択されていません。条件を確認してください
直し方 — 左側・右側の両方にノードをつないでください。
片側だけつながっている
左右のどちらか一方しかつながっていないと出ます。翻訳された文言はなく、英語のまま出ます。
left and right columns is required 1 as least
直し方 — もう片方にもノードをつないでください。
よく使う例
1. マスタから名前を引く
お題 — 購入履歴に顧客名を足したい
入力 — 左に購入履歴(顧客ID 金額)、右に顧客マスタ(顧客ID 顧客名)
設定 — 左右のキー列名が同じ → 顧客ID、左側のデータを残す(left join)
出力 — 金額 顧客ID_left 顧客ID_right 顧客名 の 4 列。マスタにない顧客の 顧客名 は空欄
2. 名前が違うキーでつなぐ
お題 — 片方は 顧客ID、もう片方は customer_id になっている
入力 — 左に購入履歴(顧客ID 金額)、右に顧客マスタ(customer_id 顧客名)
設定 — 左右のキー列名が異なる → 左 顧客ID / 右 customer_id
出力 — 顧客ID と customer_id の両方が残ります(名前が違うので接尾辞は付きません)
3. 両方にある行だけ残す
お題 — マスタに登録のある顧客の取引だけを見たい
入力 — 左に購入履歴(顧客ID 金額)、右に顧客マスタ(顧客ID 顧客名)
設定 — 共通部分を残す(inner join)
出力 — マスタにない顧客の行が落ちます
4. 複数の列をキーにする
お題 — 店舗と日付の組で在庫表と売上表をつなぎたい
入力 — 左に在庫表(店舗 日付 在庫数)、右に売上表(店舗 日付 売上)
設定 — 左右のキー列名が同じ → 店舗 と 日付 の 2 つ
出力 — 2 列とも一致した行だけがつながります。キー列は左右そろって残るので、列は名前順に 在庫数 / 売上 / 店舗_left / 店舗_right / 日付_left / 日付_right の 6 列になります
5. つないでから列を整理する
お題 — _left と _right が両方出て見づらい
入力 — 例 1 の出力(金額 顧客ID_left 顧客ID_right 顧客名)
設定 — この機能のあとに列選択をつなぐ
出力 — 要る方だけを残せます。名前は列名の変更で戻せます