memocon プログラミングのメモや物欲日記、雑記等

SQL ServerからMySQLへする時にQueryではまったこと

2012年01月26日 16時53分

SQL Server用に作成したQueryをMySQLで動かしたら動かない動かない…

ということではまった点を記述。

1.SELECT INSERT 文

よく既にレコードが存在する場合はINSERTしないという場合に以下のように記述していた。

v1辺りが主キーと思ってみてほしい。
既にレコードが存在している場合はレコードを登録しないというQueryだ。

しかしMySQLだとこのQueryは動かない。
NOT EXISTSだろうがEXISTSだろうが行が取れないためにレコードが登録されなかった。

と一つサブクエリを挟むことで行が作成されレコードが登録されるようになる。

2.
DELETE文などで自分自身をサブクエリで参照することはできない

サブクエリ使わずにそのまま書ける文だがわかりやすくする為に完結なQueryにした。
key2の値がhogeのレコードのkeyの値を持つレコードを削除するという文だ。
これがMySQLではエラーになる。

※参考サイト
http://hamamuratakuo.blog61.fc2.com/blog-entry-427.html

上記の問題にあたったらSelect文とDELETE文を分けれる場合は分けた方が無難だろう。

3.
AUTO_INCREMENTは物理削除すると削除した番号を再利用する

SQL ServerのIDENTITYと同じ感覚で使用するとはまる。
主キーとして使用するには注意が必要。