4

次のテーブルがあります。

T1

  ID 
  1
  2
  3

T2

ID  SERVICE
1   PSTN
1   ADSL
3   ADSL

T3

ID   DEV
1    3G
3    2G 

出力として欲しい

ID  SERVICE/DEV
1      PSTN
1      ADSL
1      3G
2
3      ADSL
3     2G

これをマージする方法は?

クラシックは使えませんLEFT OUTER JOIN

1 つの ID の出力テーブルの合計数は要約である必要がありますが、T2+T3 (FOR ID=1 2+1=3)2ID=2番目の列が空白のテーブル出力にも存在する必要があります。

4

3 に答える 3

7

具体的には、2 つのテーブルの結果を単純に結合し、サブクエリ内で使用して、後でT2使用T3して結合することができます。これを試して、unionT1LEFT JOIN

SELECT t1.ID, b.Service
FROM T1 LEFT JOIN
    (
        SELECT ID, Service FROM T2
        UNION ALL
        SELECT ID, Dev AS Service FROM T3
    ) b ON t1.ID = b.ID

さらに、値COALESCEを持つ列をカスタマイズする場合に使用できnullます。したがって、以下の例では、サービス2がないため、代わりに表示されます-none-null

SELECT t1.ID, COALESCE(b.Service, '-none-') Service
FROM T1 LEFT JOIN
    (
        SELECT ID, Service FROM T2
        UNION ALL
        SELECT ID, Dev AS Service FROM T3
    ) b ON t1.ID = b.ID

SQLFiddle デモを見る

于 2012-10-03T13:48:43.643 に答える
2

これを試すことができます。

SELECT T1.ID, service "SERVICE/DEV"
FROM T1, T2
WHERE T1.ID = T2.ID(+)
UNION
SELECT T1.ID, dev "service/dev"
FROM T1, T3 
WHERE T1.ID = T3.ID(+);
于 2012-10-03T13:54:22.490 に答える
1

ユニオン/ユニオンオールが欲しいですか?

select *
from ((select id, service
       from t2
      ) union all
      (select id, service
       from t3
      ) union all
      (select id, NULL as service
       from t1
       where t1.id not in (select id from t2) and
             t1.id not in (select id from t3)
      )
     ) t

句のはNOT INWHEREこれを行う最も効率的な方法ではない場合があります。しかし、これはあなたが目指している結果ですか?

于 2012-10-03T13:47:47.527 に答える