2

3 つのテーブルがあり、1 つはデフォルト値のテーブルです。

私がする必要があるのは、TableA と TableB の値を選択し、デフォルト値の選択から欠落している値を埋め戻すことです。

各テーブルには、キーと値の列があります。

データの例は次のようになります。

DefaultTable
-------------
Key1 | Value1  
Key2 | Value2  
Key3 | Value3  
Key4 | Value4  
Key5 | Value5  

TableA
--------------
Key3 | AValue3
Key5 | AValue5

TableB
--------------
Key1 | BValue1

したがって、最終的なデータ セットは次のようになります。

Key1 | BValue1  
Key2 | Value2  
Key3 | AValue3  
Key4 | Value4  
Key5 | AValue5  

私はさまざまな結合をいじってみましたが、それをクラックできないようです。あなたの助けをいただければ幸いです。

ありがとう

4

2 に答える 2

5

これで使えますLEFT JOIN

SELECT  a.Column1,
        COALESCE(b.Column2, c.Column2, a.Column2) Column2
FROM    DefaultTable a
        LEFT JOIN TableA b
            ON a.Column1 = b.Column1
        LEFT JOIN TableB c
            ON a.Column1 = c.Column1

結合についてさらに詳しく知りたい場合は、以下のリンクにアクセスしてください。

出力

╔═════════╦═════════╗
║ COLUMN1 ║ COLUMN2 ║
╠═════════╬═════════╣
║ Key1    ║ BValue1 ║
║ Key2    ║ Value2  ║
║ Key3    ║ AValue3 ║
║ Key4    ║ Value4  ║
║ Key5    ║ AValue5 ║
╚═════════╩═════════╝

このリンクから引用: postgresql とのパフォーマンス比較: left join vs union all (と同じであることを願っていSQL Serverます)。

LEFT JOIN を使用したクエリは、インデックスを利用するのに最適です。たとえば、並べ替えられた結果が必要な場合、UNION クエリは最も遅くなります。または、クエリがメイン クエリのサブクエリである場合、UNION はテーブル [要素] インデックスの悪用を防ぎます。したがって、そのようなサブクエリの JOIN または WHERE を実行するのは遅くなります。

于 2013-03-30T10:01:01.233 に答える
1

RIGHT JOIN最初に 2 つのテーブルの値を( と同じ効果でLEFT JOIN) デフォルトに結合する方がおそらく効率的です。

SELECT d.key_col
      ,COALESCE(t.value, d.value) AS value
FROM  (
    SELECT key_col, value FROM tbl_a
    UNION ALL
    SELECT key_col, value FROM tbl_b
    ) t
RIGHT  JOIN default_tbl d ON t.key_col = d.key_col;

あなたがコメントで提供したように、とUNION ALLの間に重複があってはならないので、私は を使用します。tbl_atbl_b

->SQLfiddle

于 2013-03-30T10:15:41.597 に答える