0

次の2つのテーブルがあります。1つは注文情報を格納し、もう1つはキー|値情報を格納します。

CD = DキーはありませんCOLOR_CD。両方のテーブルを結合して、テーブルにないキーと値のペアに関係なく、すべての注文を取得したいと思いMASS_DECODEます。

助けてもらえますか:D

ORDER_INFORMATION

ORDER_NUMBER    |COLOR_CD   |
----------------|-----------|
1               |A          |
2               |B          |
3               |C          |
4               |D          |

MASS_DECODE

KEY         |CD             |VALUE      |
------------|---------------|-----------|
COLOR_CD    |A              |Green      |
COLOR_CD    |B              |Blue       |
COLOR_CD    |C              |Red        |
SIZE_CD     |A              |Large      |
SIZE_CD     |B              |Medium     |
SIZE_CD     |C              |Small      |

SQL:

select order_number, cd, value
from order_information
left outer join mass_decode 
on (color_cd = cd)
and key = 'COLOR_CD';

結果:

ORDER_NUMBER    |CD         |VALUE      |
----------------|-----------|-----------|
1               |A          |Green      |
2               |B          |Blue       |
3               |C          |Red        |

期待される:

ORDER_NUMBER    |CD         |VALUE      |
----------------|-----------|-----------|
1               |A          |Green      |
2               |B          |Blue       |
3               |C          |Red        |
4               |D          |NULL       |

編集:申し訳ありませんが、テーブルに間違った情報を表示しました。修正されてから。

4

3 に答える 3

1

列名があいまいです。2つのテーブルに同じ名前の2つの列があるので、where句のキーはどちらの列を参照しますか?Oracleの新しいバージョンでは、これにより実際にエラーが発生すると思います。これを試して:

select oi.order_number, oi.color_cd, md.value
from order_infomation oi
left outer join mass_decode md
on (oi.color_cd = md.cd)
where oi.key = 'KEY_A';

編集:

@billyへの回答によると、それはうまくいかなかったようです。キー述語をjoin句に入れることもできます。

select oi.order_number, oi.color_cd, md.value
from order_infomation oi
left outer join mass_decode md
on (oi.color_cd = md.cd) and oi.key = 'KEY_A';
于 2012-09-26T02:38:18.227 に答える
1
select *
  from order_information oi
   left join mass_decode md 
     on (
            oi.color_cd = md.cd 
        and oi.key = md.key
     )
where oi.key = 'KEY_A';

SQLFiddle

upd:

あなたの更新によると:

select *
  from order_information oi
   left join mass_decode md 
     on oi.color_cd = md.cd
where md.key = 'COLOR_CD' or md.key is null;

SQLFiddle

于 2012-09-26T02:45:43.387 に答える
0

これは行う必要があります:

SELECT 
    order_number, 
    color_cd AS cd, 
    (
        SELECT value FROM mass_decode m2 WHERE m2.key = o.key AND m2.cd = o.color_cd
    ) AS value
FROM order_information o
WHERE o.key =  'KEY_A'
于 2012-09-26T02:50:46.550 に答える