2012.08.24
STAFF BLOG
スタッフブログ
TECHNICAL
テクログ

技術ブログが始まって2ヶ月弱・・・・
みんなしっかりとした知識を披露してくれて・・・タジタジのなべっちです。
最近は開発をガッツリやっているわけではないので、書かずに華麗にスルーしようと思っていたのですが・・・
しかたない。
次に繋がるように、簡単にわかる事を書いてハードルをさげてやろうと思っています。
遠い過去の話ですが・・・VB6とSQL Serverを使ってとある保険のシステムを開発していました。
ずっとSQL Serverを使っていたので、私の基本的なSQL文法=SQL Serverの文法という図式が成立してしまっています。
最近のコアテックでは、MySQLを使うことが非常に多いのですが、SQL Serverとの違いなんてまったく意識せずSQL文を書く事が・・・
すると・・・・何度確認してもあっているはずの文法が動かなくてはまるという事がありまして・・・非常に苦労しました。。。。
調べていたらこんな違いが!と言う事が書いてあるHPを見つけてやっと解決。。。。
非常に助かったので、そのHPから抜粋して違いを書いておきます。
はまったのはこの部分↓
・DELETE文等で自分自身をサブクエリで参照できない!
DELETE FROM table1 WHERE id IN (SELECT id FROM table1 where key = 1 )
keyの値 が 1 のレコードを削除するという文です。
※本来はサブクエリを使う必要がない文ですけど、わかりやすく簡単に書いてあります。
その他にこんなのもありました。
・SELECT INSERT
INSERT INTO table1 (a1,a2) SELECT "値1","値2" FROM table1
WHERE NOT EXISTS (SELECT * FROM table1 WHERE a1 = "値1" AND a2 ="値2")
既に値1、値2のレコードが存在している場合は登録しないという文です。
My SQLではNOT EXISTSでもEXISTSでも行が取れない為 レコードは登録されないようです。
解決方法は↓
INSERT INTO table1 (a1,a2) SELECT "値1","値2" FROM (SELECT "値1" AS b1,"値2" AS b2) tbl1
WHERE NOT EXISTS (SELECT * FROM table1 WHERE a1 = "値1" AND a2 ="値2")
とサブクエリを挟むと行が作成されてレコードが登録されるようです。
もう1つ
AUTO_INCREMENTは物理削除すると削除した番号を再利用する
SQL ServerのIDENTITYとは違うので同じ感覚で使用するとはまる原因になりそうです。
主キーとして使用する際にはご注意を・・・・
気付かなかった~
知らなかった~
とはまる事があるようなのでメモ書き程度に書いておきます。
次回からは役立つ技術情報が続く・・・・はず。