令和3年午後1問3設問2(3)k

にゃんちゃんさん  
DB シルバーマイスター
(No.1)
エアコンが備え付けてあればY、なければNを表示するCASE文の穴埋め問題
エアコンの設備コード(A1)だけ抽出したBS1テーブルから、左外部結合で設備コードを紐づけできるかどうかで判定しています。

模範解答は以下のどちらかとなっています。
CASE WHEN BS1.設備コード IS NOT NULL THEN 'Y' ELSE 'N' END AS エアコン
CASE WHEN BS1.設備コード = 'A1' THEN 'Y' ELSE 'N' END AS エアコン
NULLじゃない(もしくはA1)ならエアコンあり、それ以外ならエアコンなしという考え方です。

逆に、以下の回答でもよいのではないでしょうか。
CASE WHEN BS1.設備コード IS NULL THEN 'N' ELSE 'Y' END AS エアコン
NULLだったらエアコンなし、それ以外ならエアコンありという考え方です。

個人的には、IS NULLの方がインデックス使ってくれそうだし
何より文字数がNOTの3文字分少ないし、こっちの方が模範解答っぽい気がするのですが
何故だか公式解答にもテキスト模範解答にも全く触れられておらず
問題文を見落としたのかな?と不安です・・・。
2022.07.26 20:20
GinSanaさん 
DB シルバーマイスター
(No.2)
>CASE WHEN BS1.設備コード IS NULL THEN 'N' ELSE 'Y' END AS エアコン
は、模範解答を言い換えているだけだから、あえて書いてないだけな気がします。

>IS NULLの方がインデックス使ってくれそうだし
実装による(たとえば、Oracleはis nullでインデックスを使わない)ので、そこは関係ない気がします
CREATE INDEX – PostgreSQL 10.5文書

NULLS FIRST
NULLを非NULLより前にソートすることを指定します。 これはDESCが指定された場合のデフォルトです。

NULLS LAST
NULLを非NULLより後にソートすることを指定します。 これはDESCが指定されない場合のデフォルトです。
NULLと非NULLの割合に偏りがある場合の少数派の検索は、インデックスが有効に機能する・・・っていうのが、メジャーな考え方なワケですけど、今回はそもそも物件設備でプライマリキー張っているわけだから偏りもなにも100対0じゃねえか、というわけでインデックスが有効もなにもないですね。

techblog.istyle.co.jp/archives/1514
IS NULLはインデックスを使うのか - istyle Tech Blog
2022.07.27 11:28
にゃんちゃんさん  
DB シルバーマイスター
(No.3)
GinSanaさん
ご回答ありがとうございます!

インデックス関係ないですね…笑
is nullだけ見て、否定形じゃないから製品によってはいけそうと思いましたが
case文の中ですし、いろいろインデックスうんぬんは関係なかったです。
2022.07.27 13:07

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。

その他のスレッド


Pagetop