3つのテーブルの条件付き結合を行いたいとします。左は、テーブルBに参加し、キーが欠落している場合、次にBで2及び4に該当するキー、およびC. 期待される結果で5用がないキーはありませんC.複数のテーブルへのSQL条件付き結合をワンショットで行う
+------+--+------+-------------+--+------+-------------+
| A.id | | B.id | B.OtherFish | | C.id | C.OtherFish |
+------+--+------+-------------+--+------+-------------+
| 1 | | 1 | B1 | | 1 | C1 |
| 2 | | | | | 2 | C2 |
| 3 | | 3 | B3 | | 3 | C3 |
| 4 | | | | | 4 | C4 |
| 5 | | 5 | B5 | | | |
| 6 | | 6 | B6 | | 6 | C6 |
+------+--+------+-------------+--+------+-------------+
テーブルへの結合:
は、+------+-----------+
| A.id | OtherFish |
+------+-----------+
| 1 | B1 |
| 2 | C2 |
| 3 | B3 |
| 4 | C4 |
| 5 | B5 |
| 6 | B6 |
+------+-----------+
私が使用するクエリは、次のとおりです。
select
A.id
,coalesce(B.id,C.id)
,coalesce(B.OtherFish,C.OtherFish)
from A
left join B
on A.id=B.id
left join C
on A.id=C.id
アプローチの欠点は、私は別のテーブルから必要なすべての列を通じて合体使用しなければならないということです。テーブルに100個の列があると迷惑です。 のように、全体のエイリアスを融合させることが望ましいでしょう。coalesce(B,C)
です。 C.idに私はすべてのカラムを通じて合体することなく、すべての良いデータを持っているなるように
left join B
on A.id=B.id
left join C
on A.id=(case when B.id is null then C.id end)
:
は次のように一発でそれを作るために、それは可能ですか?
は、いくつかのサンプル・テーブル・データと予想される結果を追加します。 – jarlh
あなたはどのRDBMSを使用していますか? –
COALESCEの何が問題なのですか? –