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

カラムAとカラムAA
または、カラムBとカラムBB
または、カラムCとカラムCC これらを比較して
どちらか一致しないものが見つかったら1とするという
case when文を書きたいです。

ただ、それぞれのカラムNullを含む可能性があるので、
単純に比較するとエラーになりますので、
以下のようにしました。(カラムCとカラムCCは数値フィールドです)
, CASE
WHEN NVL(カラムA, '123') != NVL(カラムAA, '123')
OR NVL(カラムB, '123') != NVL(カラムBB, '123')
OR NVL(カラムC, '123') != NVL(カラムCC, '123')
TEHN 1
ELSE '' END FLG

この場合、123が絡むに入っていないこと前提で、
事実123が運用で入ることは考えられませんが、
スマートでないので別案を考えていますが、
良案を教えてほしいです。

●質問者: FujiiRock
●カテゴリ:コンピュータ ウェブ制作
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● きゃづみぃ
●33ポイント

未確認ですが 普通に 全一致の not をとればよいかと思います。

not (
カラムA = カラムAA and
カラムB = カラムBB and
カラムC = カラムCC )

お互いが Nullの場合も 一致すると 判断してよいのですか?

ま、Nullで 一致と みなされるかどうかは 確認してみないと わかりませんが。

あと Nullと 何も入ってないのは 区別しますか?


きゃづみぃさんのコメント
http://pub.ne.jp/ILoveDB/?entry_id=2961093 Nullの扱いは DBによって違いがあるようです。 ま、あとから考えてみて カラムA = カラムAAの場合は、Mullは 無視されるかと思われます。

きゃづみぃさんのコメント
ま、質問にあるように NVLを用いて 記述するしかないと思いますが != で or するより = で ANDをとって Notのほうが スマートだとは 思います。 スマートとは 検証しやすい、確認しやすいということです。

FujiiRockさんのコメント
なるほど。。!= or より AND で NOT ですね。 ありがとうございましたっ!!

2 ● oil999
●34ポイント ベストアンサー

カラムの内容がNULL同士だった場合にはTRUEを返したいという要件のようですから、やり方は合っています。
一般的には次のようにします。chr(0)の方がデータとして有り得ない値なので。

CASE
 WHEN NVL(カラムA, chr(0)) != NVL(カラムAA, chr(0))
 OR NVL(カラムB, chr(0)) != NVL(カラムBB, chr(0))
 OR NVL(カラムC, chr(0)) != NVL(カラムCC, chr(0))
 TEHN 1
ELSE '' END FLG

FujiiRockさんのコメント
いつもありがとうございますっ!

3 ● taroe
●33ポイント
 WHEN NVL(カラムA, '') != NVL(カラムAA, '')
 OR NVL(カラムB, '') != NVL(カラムBB, '')
 OR NVL(カラムC, '') != NVL(カラムCC, '')

多くの人はこういう感じで書くかも。
空文字で問題ないはずですから。


FujiiRockさんのコメント
なるほど。そうなんですね。ありがとうございますっ!!
関連質問

●質問をもっと探す●



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