人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

オラクルのSQLについて その3

テーブルAとBがあり
Aには 項目A1、項目A2、項目A3
Bには 項目B1、項目B2、項目B4
があるとします。

このとき、
項目A1と項目B1が 一致し
項目A2が項目B2の先頭一致の条件で一致するとき

項目A1 = 項目B1
項目A2 like ( 項目B2 & "%")
(項目B1は必須だが 項目B2がNullの時は、項目B2は条件に入れない)

この条件にあてはまる時、項目A1を項目B4にして出力したいのです。

項目A1 or 項目B4,項目A2,項目A3と出力させ、項目A1 or 項目B4でソートして出力したいのですが
どうすればいいでしょうか?




項目A1、項目A2、項目A3
1,210,1
4,51,2
5,644,3
5,6448,4
5,888,5

項目B1、項目B2、項目B4
1,,2
5,64,3

とあったとき

項目A1 or 項目B4、項目A2、項目A3
2,210,1
3,644,3
3,6448,4
4,51,2
5,888,5


と出力されるようなSQLを教えてください。
なお、SELECT文だけで やりたいのです。
別にテーブルを作成してUPDATEしてやれば簡単なんですけどね。

オラクルの得意な人、よろしくお願いします。

●質問者: きゃづみぃ
●カテゴリ:コンピュータ
✍キーワード:A1 A3 b2 B4 SELECT
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● Allashe
●5ポイント

文字列接続演算子がちょっと怪しいです。

Oracle使ったこと無いもので・・

SELECT

CASE WHEN TABLE_A.A2 like (NVL(TABLE_B.B2,'') || "%")

THEN TABLE_B.B4 ELSE TABLE_A.A1 END AS A1_OR_B4,

TABLE_A.A2,TABLE_A.A3

FROM TABLE_A LEFT OUTER JOIN TABLE_B ON

TABLE_A.A1=TABLE_B.B1

◎質問者からの返答

動作は、明日、確認してみます。

SQLでCASE文を使うんですね。

こういうのは、やったことが なかったです。

残念ながら、A1_OR_B4の列にNullの値が入った行ができてしまいましたね。

あと、ソートが 抜けてます。

でも、SQLの作り方は 参考になりましたので、よかったです。


2 ● freemann
●30ポイント

これでよろしいかと

SELECT A1,A2,A3 FROM A

WHERE NOT EXISTS (SELECT *

FROM B

WHERE A1=B1 AND A2 LIKE B2 & '%')

UNION

SELECT B4,A2,A3 FROM A,B

WHERE A1 = B1 AND A2 LIKE B2 & '%'

◎質問者からの返答

どこでソートさせてるのか わかりませんが、ちゃんとソートされますね。

どういう感じでソートされるのか 教えてもらえないでしょうか?

ちょっと急ぎなので 別質問にします。


3 ● myawoo
●40ポイント ベストアンサー

環境がないので確認はできませんでした

select

case when b.b4 is not null then b.b4 else a.a1 end as a1orb4,

a.a2,

a.a3

from a

left outer join b on a.a1 = b.b1 and (b.b2 is null or a.a2 like b.b2 || '%')

order by a1orb4

◎質問者からの返答

ばっちしですね。


4 ● Allashe
●15ポイント

すみません。

最初の回答だと、A1=B1の時と、A1に対してB1が無いときの区別がつきません。下のようにして下さい。

SELECT

CASE WHEN TABLE_A.A2 like (NVL(TABLE_B.B2,'') || "%") AND TABLE_B.B1 is not null

THEN TABLE_B.B4 ELSE TABLE_A.A1 END AS A1_OR_B4,

TABLE_A.A2,TABLE_A.A3

FROM TABLE_A LEFT OUTER JOIN TABLE_B ON

TABLE_A.A1=TABLE_B.B1

◎質問者からの返答

あとは ソートだけでしたね。

でも、ほかの人の回答で だいたいOKなので ソートを入れたものの回答は不要です。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ