• ベストアンサー

IS NULL

いつもお世話になっています。 PL/SQLでストアドを作成中なのですが、 あるUPDATE分のWHERE句の条件として“IS NULL”を使用したいのですが、監督者から “IS NULL”はNGという指示が出てしまい困っています。 (理由はNULLは索引の対照外だからということです。) 以前、“IS NOT NULL”の代用として、“項目名 ≧ 0”が使えることを学んだのですが、“IS NULL”にも同じように代用できる条件の記述方法はありますか? “IS NOT NULL”が“項目名 ≧ 0”なら “IS NULL”は“項目名 < 0”というのは無謀でしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

こんにちは。 確かに「IS NULL」は、INDEXを使いませんが、 NULLかどうかを判断するなら、仕方がないと思います・・・。 「NVL」で変換すれば何とかなりそうですが、レスポンス的には意味がありません・・・。 WHERE句の条件としてNULLを使用できないのなら、元のテーブル構造に問題があると言わざるを得ません・・・。 この場合はいたしかたないかと・・・。 (^^ゞ

その他の回答 (1)

  • ARC
  • ベストアンサー率46% (643/1383)
回答No.2

EXISTS は確かインデックスを使用したような・・・ UPDATE TABLE1 SET FIELD1 = 'HOGE' WHERE FIELD2 IS NULL; の代用として UPDATE TABLE1 T1 SET FIELD1 = 'HOGE' WHERE NOT EXISTS (SELECT T2.任意フィールド FROM TABLE1 T2 WHERE T2.FIELD2 >=0 AND T2.キー項目 = T1.キー項目); ではダメでしょうか? (パフォーマンスとかは未チェックですが・・・)

関連するQ&A