MySQLでWHEN句のサブクエリ中にて
MySQL ver.5.0.95です。
PHPからSQL文を作ってDBへインサートしているのですが
重複した値が合った場合はupdateするように書いています。
TBL1には
|id |string |count
1 aaa 0
2 bbb 3
3 ccc 1
TBL2には
|id2 |string2 |count2
1 aaa 0
2 bbb 2
3 ccc 1
実際はもう少し複雑ですが、こういう感じでデータが入ってるとします。
このとき、TBL1のそれぞれをインサート若しくはアップデートするのに
TBL2の同一IDのものの、count2の状態によって場合分けしたく
同一IDのcount2が1以上なら変更しない、という風にするため以下のように書いたのですが
insert into TBL1 values
(1, "aaa", 3),
(2, "bbb", 3),
(3, "ccc", 3),
(4, "ddd", 3)
on duplicate key update count = CASE WHEN (select count2 from TBL2 where id2 = values(id)) >=1 THEN count ELSE count + values(count) END;
#1064 - You have an error in your SQL syntax;というエラーになって出来ません。
WHENの中のサブクエリで、where id2 = values(id) 恐らくこの文がダメなようです。
例えば決め撃ちで1つ1つ書くと通ります。
insert into TBL1 values(1, "aaa", 3) on duplicate key update count = CASE WHEN (select count2 from TBL2 where id2 = 1) >=1 THEN count ELSE count + values(count) END;
insert into TBL1 values(2, "bbb", 3) on duplicate key update count = CASE WHEN (select count2 from TBL2 where id2 = 2) >=1 THEN count ELSE count + values(count) END;
insert into TBL1 values(3, "ccc", 3) on duplicate key update count = CASE WHEN (select count2 from TBL2 where id2 = 3) >=1 THEN count ELSE count + values(count) END;
insert into TBL1 values(4, "ddd", 3) on duplicate key update count = CASE WHEN (select count2 from TBL2 where id2 = 4) >=1 THEN count ELSE count + values(count) END;
これをエラーになったような文に変えて1文にまとめたいのですが、無理でしょうか?
あとそもそもこれをまとめたほうが速いと思ってそうしたいのですが、
変わらないのなら1文1文;でつなげて書くやり方でいこうと思っています。
まとめると速くなることはあるでしょうか?