はじめに
この記事はBubbleのリレーションシップの設定方法について記載しています。
BubbleのForumに記載されていたリレーションシップの設定方法に記載されていた内容を写経していましたが、詳細な説明が無かったり、写経する内に発生した疑問に対して自分なりの回答が出来たりと色々あったので、復習も兼ねてメモ代わりに記事にする事にしました。
実はこの記事は投稿するのを忘れていて、下書きのまま1年くらい眠っていました...
時が経てば変わる類の内容ではないので大丈夫だと思いますが、念のためにその旨を記載しておきます。
データの準備
リレーションシップの為に、2つのType(データベーステーブルの様なもの)を作成して、その中にテストデータを登録していきます。
内容は次の通りです。
Relation Sample AというTypeを次の通りに作成し、
次のデータを登録します。
このテーブルにしか存在しないデータExists in A only...
と、この後作成するテーブルにも存在するExists in A and B...
の2種類です。
もう1つのType、Relation Sample Bを次の通りに作成し、
次のデータを登録します。
このテーブルにしか存在しないデータExists in B only...
と、先ほど作成したテーブルにも存在するExists in A and B...
の2種類です。
使用するelements
- Repeating Group
- Text(Relation Sample A表示用)
- Text(Relation Sample B表示用)
リレーションの設定
LEFT OUTER JOIN
Sample Relation Aの全データ(LEFTに該当)と、Textが一致するSample Relation Bのデータを表示させます。
次のSQLと同様の処理です。
SELECT
Sample Relation A.Text,
Sample Relation B.Text
FROM Sample Relation A
LEFT OUTER JOIN Sample Relation B
ON Sample Relation A.Text = Sample Relation B.Text
設定内容
Text(Relation Sample A表示用)を次の通りに設定。
Text(Relation Sample B表示用)を次の通りに設定。
出力結果
次の通りのデータが出力されます。
Relation Sample Aの全データが出力され、Sample Relation BはRelation Sample AのTextデータと同じデータだけが出力されてるのが分かります。
INNER JOIN
Sample Relation AとSample Relation B、お互いのTextが一致するデータだけを表示させます。
次のSQLと同様の処理です。
SELECT
Sample Relation A.Text,
Sample Relation B.Text
FROM Sample Relation A
INNER JOIN Sample Relation B
ON Sample Relation A.Text = Sample Relation B.Text
設定内容
Text(Relation Sample A表示用)を次の通りに設定。
Text(Relation Sample B表示用)を次の通りに設定。
出力結果
次の通りのデータが出力されます。
Sample Relation AとSample Relation B、お互いのTextが一致するデータだけが出力されてるのが分かります。
FULL OUTER JOIN
FULL OUTER JOIN
については先に元の記事を読んで欲しいのですが、英語の記事が苦手な方の為に、要点だけ次に記載しておきます。
要点ですが、元の記事には次の通りの記載があります。
Note that in SQL you will get TableA or TableB null names back even if there is no match - this does not happen in Bubble.
RDBの場合、Joinの条件に一致するデータが存在しなくとも、どちらかのテーブルのnull名が返されますが、Bubbleではnullのデータが発生しないという旨の事が記載されています。
つまり、RDBのFULL OUTER JOIN
とは異なる挙動を示すという事ですので、RDB経験者はその点に注意してお読みください。
...ただ、元の記事の出力結果のサンプルを見ると、これはFULL OUTER JOIN
ではなくUNION
ではないかと思います。
設定内容
Text(Relation Sample A表示用)を次の通りに設定。
(今回はデータが1列で出力されるため、設定するTextは1つだけ)
出力結果
次の通りのデータが出力されます。
...UNION
ですよね?
RDBのFULL OUTER JOIN
元の記事には記載がありませんが、RDB経験者が想像するFULL OUTER JOIN
を作成できたので記載します。
設定内容
Repeating Groupを次の通りに設定。(ここは先述のFULL OUTER JOIN
の設定内容と同じです)
Text(Relation Sample A表示用)を次の通りに設定。
Text(Relation Sample B表示用)を次の通りに設定。
出力結果
次の通りのデータが出力されます。
想像通りのデータが表示されました。
最後に
元の記事には「FULL OUTER JOIN WITH EXCLUDES」というタイトルで、お互いに存在する値以外の値を取得するものについても記載がありましたが、それについては特に記載する事が無かったので省きました。
Bubbleのリレーションシップに慣れるのであれば、本記事の内容を写経するだけで充分だと思います。
本記事で失敗したのがtypeのフィールド名を「Text」にしてしまった事で、elementsの「Text」と区別がつきづらくなった事です。文脈で判断できるかと思いますが、次回があれば気を付けたいと思います。