- ベストアンサー
MySQLでWHEN句のサブクエリ中にてエラーが発生する問題について
- MySQLのver.5.0.95で、PHPからSQL文を作ってDBへインサートしている際に、同一IDのcount2の状態によって場合分けしたくなりました。しかし、WHEN句のサブクエリ中でエラーが発生しています。エラーメッセージは「#1064 - You have an error in your SQL syntax;」です。
- 具体的には、TBL1に対して複数の値をインサートし、重複した場合はアップデートするようにしたいと思っています。アップデートするかどうかは、TBL2の同一IDのレコードのcount2の値に依存します。インサート文とアップデート文を組み合わせるために、CASE文を使用しています。
- しかし、サブクエリの部分でエラーが発生しています。具体的には、WHEN句内のサブクエリの部分で、「where id2 = values(id)」という部分がエラーになっています。この部分を決め撃ちで記述するとエラーは発生しませんが、すべてを1つのクエリにまとめることができません。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
バルク処理でupdateまでやってしまうとなると一度テンポラリテーブルを 作った方がよいかも //元データ create table TBL1(id int not null unique key,string varchar(10),count int); insert into TBL1 values(1,'aaa',0),(2,'bbb',3),(3,'ccc',1); create table TBL2(id2 int not null unique key,string2 varchar(10),count2 int); insert into TBL2 values(1,'aaa',0),(2,'bbb',2),(3,'ccc',1); //処理 create temporary table tmp(id3 int,string3 varchar(10),count3 int); insert into tmp values (1,'aaa',3),(2,'bbb',3),(3,'ccc',3),(4,'ddd',3); insert into TBL1 select id3,string3,count3 from tmp left join TBL2 on id3=id2 where count2 is null or count2<1 on duplicate key update count=count3; //テンポラリを使わない場合はunionでデータを羅列? insert into TBL1 select id3,string3,count3 from (select 1 as id3,'aaa' as string3,3 as count3 union select 2,'bbb',3 union select 3,'ccc',3 union select 4,'ddd',3) as list left join TBL2 on id3=id2 where count2 is null or count2<1 on duplicate key update count=count3;