2017-09-06 36 views
0

に基づいて、テーブルAまたはBに参加しますインナーは、私はこれらの3つのテーブルを持っている存在

------------------------------ 
|KEY | APPLICATION | VALUE_C1| 
------------------------------ 

B.VALUE_B1またはC.VALUE_C1と一緒に、A.VALUE_A1、A.VALUE_A2をBまたはCのアプリケーションの存在に基づいて返したいとします。このアプリケーションは、スクリプトのwhere節で指定されています。

例: 表Aには10個のレコードがあります。表Bには、アプリケーション 'APP1'を含む6つのレコードが含まれています。表Cには、アプリケーション 'APP2'を含む4つのレコードが含まれています。テーブルBとCの両方がテーブルAに接続されたKEYを介しています。与えられたアプリケーションが 'APP1'の場合、B.VALUE_B1を返したいと思います。 'APP2'が与えられたら、私はC.VALUE_C1を返したいと思います。

CASEのような条件に基づいて2つのテーブルのいずれかでINNER JOINを実行できますか?

+2

選択肢があります。あなたが試したこと、あなたの期待した結果と実際の結果を表示してください。 – dbajtr

答えて

2

ないINNER JOINはなく、LEFTは、この

select A.KEY 
     A.VALUE_A1, A.VALUE_A2, 
     CASE WHEN B.VALUE_B1 IS NOT NULL THEN B.VALUE_B1 ELSE C.VALUE_C1 END AS RESULT_VALUE 
from A 
    LEFT JOIN B on A.key=B.key 
    LEFT JOIN C on A.key=C.key 

UPDATEのように登録しよう:はい、それは可能である

select A.KEY 
     A.VALUE_A1, A.VALUE_A2, 
     sub.VALUE AS RESULT_VALUE 
from A 
    INNER JOIN (SELECT KEY, VALUE_B1 as VALUE 
       FROM B 
       UNION ALL 
       SELECT KEY, VALUE_C1 as VALUE 
       FROM C) sub on A.KEY=sub.KEY 
+1

ヒント:いくつかのタイプを保存するために 'coalesce(B.VALUE_B1、C.VALUE_C1)'。 – jarlh

+0

@jarlh私はあなたよりも機能を知っています)は、アイデアの理解を容易にするために書いただけです。 – StanislavL

+0

@ StanislavLあなたの選択肢は私の問題の解決策でした。ありがとうございました! – Erwin

関連する問題