- PR -

SQLの構文

投稿者投稿内容
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2005-09-07 00:22
コード:
select
    *
from
    A
left join
    B
on
    A.z = B.z
where
    A.y = 1
union all
select
    *
from
    A
left join
    B
on
    A.z = C.z
where
    A.y = 2
union all
select
    *
from
    A
left join
    B
on
    A.z = D.z
where
    A.y = 3


特に、caseもdecodeも不要かと思います。
unionする時は行がユニークになるので、
重複行を許す場合はunion allとしなければいけません。
明智重蔵
大ベテラン
会議室デビュー日: 2005/09/05
投稿数: 127
投稿日時: 2005-09-07 10:21
ご指摘ありがとうございます

unionを使うSQLを修正ました

OracleSQLパズル
http://oraclesqlpuzzle.hp.infoseek.co.jp


[ メッセージ編集済み 編集者: 重蔵 編集日時 2005-09-07 10:25 ]
とんくま
ベテラン
会議室デビュー日: 2005/08/02
投稿数: 56
お住まい・勤務地: 東京
投稿日時: 2005-09-07 10:38
これでも可能だと思います。
 
select a.Y,a.Z
, COALESCE(b.val1, c.val1, d.val1) as val1
from テーブルA a
left join
テーブルB b
ON a.Y = 1 AND b.Z = a.Z
left join
テーブルC c
ON a.Y = 2 AND c.Z = a.Z
left join
テーブルD d
ON a.Y = 3 AND d.Z = a.Z
order by 1,2;

明智重蔵
大ベテラン
会議室デビュー日: 2005/09/05
投稿数: 127
投稿日時: 2005-09-07 11:41
Y=1の時、Y=2の時、Y=3の時、いずれでもない時
の4通りに分けてからunionするよりも、

外部結合とcoalesceを組み合わせるほうがいいですね

スキルアップ/キャリアアップ(JOB@IT)