自分は普段、ORM に頼りっぱなしで全く SQL を書かないので、完全に素人の戯言だと思って読んでほしい。
Go の ORM として GORM を使っているのだが、こういうクエリを書こうとするとエラーになってしまった。
db.Where("column = ? AND date = ?", column, date).Delete(&Check{})
カレンダーにやることリスト的なものがあって、それらに対してチェックマークをつけたり外したりできるというような機能の実装である。
エラーメッセージは
Error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'column = ?))' at line 1
で、エラーコードは1064。軽く調べてみても「クエリの書き方を間違っていないか調べるべし」という当たり前の情報しか出てこない。
もっと調べてみると、「予約語を使っているかもしれない」という情報が出てきた。確かに column は予約語だった……なぜ気づかなかった!
db.Where("`column` = ? AND date = ?", column, date).Delete(&Check{})
このように書くとエラーが解消された。
気づいてしまえば当然だったが、ORM を使っているのに1064エラーが起きるというのは妙で、ちょっと苦戦したので、メモとして残しておく。