ANDとORにしてやられた!

ABC LIKE @a AND @a = '%' OR @a = '99991231' and BBB = CCC ...(A) 

こいつが原因だと気づくのに2時間かかってしまった。
ストアドの改良中に



何度やっても最初の抽出件数とその次に走る抽出の件数が合わない

ことに気づき、
修正したもののなかなかあわずに悶々とした時間を過ごしてしまった。
だから更新がこんな時間になってしまった訳なんですが・・。*1
Aの部分の中でカッコが足りなかったのが原因だった。
何がしたかったかというと、

  • レコードABCは無条件(*)か99991231で抽出
  • 99991231の場合は追加条件でレコードBBB = レコードCCC

としたかった。
が、()が足りなかった為に全く違う条件式になり、件数が大きくずれてしまった。

ABC LIKE @a AND ( @a = '%' OR @a = 99991231 and BBB = CCC ) ...(B)

Aは0×0+1、Bは0×(0+1)で、結果が変わるのは当然だ。
ANDの方が強いんだよなあ。やられました。
SQLは今の業務で本格的に触りだしてようやく慣れてきたものの、
油断するとこんな凡ミスを犯してしまう orz


ということは、前にリリースしたストアドも同じ愚を・・・
という以前に条件が純粋に足りないから、
トリッキーな値入れられたら件数が合わないだろうなあ。
明日は*2こいつらの修正で終わりそうだ。
はやく寝よっと。

*1:ただいま3時半!

*2:もう今日だけど