1

次のテーブルがあるとします。

+---------------------+
|   Item_Color_Meta   |
+---------------------+
| ID      |   value   |
+---------------------+
|   1     |   'red'   |
|   4     |   'blue'  |
+---------------------+

+---------------------+
|   Item_Height_Meta  |
+---------------------+
| ID      |   value   |
+---------------------+
|   1     |   '2inch' |
|   2     |   '7inch' |
|   6     |   '12inch'|
+---------------------+

IDと値を保持するこれらのテーブルがいくつかあります。各テーブルの列を持つすべての Id の行を返す結果セットを作成したいので、上記の場合、結果は次のようになります。

ID               Color_Meta                Height_Meta
1                  'red'                     '2inch'
2                   NULL                     '7inch'
4                  'blue'                    NULL
6                   NULL                     '12inch'

私が抱えている問題は、結合ステートメントに関するものです。これを行う最も効率的な方法は何ですか?

4

3 に答える 3

1
select  id
,       min(Color_Meta)
,       min(Height_Meta)
from    (
        select  id
        ,       value as Color_Meta
        ,       null as Height_Meta
        from    Item_Color_Meta 
        union all
        select  id
        ,       null
        ,       value
        from    Item_Height_Meta
        ) as SubQueryAlias
group by
        id

SQLFiddleでの実例。

于 2012-11-24T19:37:15.397 に答える
1

あなたが必要full outer join

select
    isnull(ICM.ID, IHM.ID) as ID, ICM.Color_Meta, IHM.Height_Meta
from Item_Color_Meta as ICM
    full outer join Item_Height_Meta as IHM on IHM.ID = ICM.ID

テーブルが 2 つ以上ある場合は、次のように考えるとよいでしょう。

updateはい、MySQLがサポートしていないことを忘れていたfull outer joinので、これはとにかく動作します:)

select
    A.ID, T1.Column1, T2.Column2, T3.Column3
from 
(
    select TT1.ID from Table1 as TT1 union
    select TT2.ID from Table2 as TT2 union
    select TT3.ID from Table3 as TT3
) as A
    left outer join Table1 as T1 on T1.ID = A.ID
    left outer join Table2 as T2 on T2.ID = A.ID
    left outer join Table3 as T3 on T3.ID = A.ID

この構文は非常に簡単に変更でき、テーブルを追加できます

SQL フィドルの例を確認してください

于 2012-11-24T19:35:00.040 に答える
0
    select c.id, c.val Color_Meta, h.val Height_Meta
    from Item_Color_Meta c
    left outer join Item_Height_Meta h on c.id = h.id

    UNION

    select h.id, c.val Color_Meta, h.val Height_Meta
    from Item_Height_Meta h
    left outer join Item_Color_Meta c on c.id = h.id
于 2012-11-24T20:11:27.250 に答える