• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:MySQLでWHEN句のサブクエリ中にて)

MySQLでWHEN句のサブクエリ中にてエラーが発生する問題について

このQ&Aのポイント
  • 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つのクエリにまとめることができません。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.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;

関連するQ&A