- ベストアンサー
Updateの複数テーブル条件時のLIMIT実行
- UPDATE文で複数のテーブルを条件付きで更新する際に、LIMITを使用するとエラーが出力される問題が発生しています。
- 複数テーブルを結合して条件を指定し、更新を行うSQL文を実行する際、LIMITを使用するとエラーメッセージが表示されます。
- 特定の条件が一致する複数のテーブルのレコードを更新するためには、LIMITを使用せずに別の方法を検討する必要があります。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>複数テーブルだと実行できないように理解しましたが、 そうですね >何が問題か教えてください。 そもそもupdate でlimitをすること自体がイレギュラーな処理です where句で厳密に条件を提示するべきですね とはいえ、以下のようにリレーションする部分をあらかじめ処理したうえで その結果をうけて処理するればできないことはなさそうです。 //元データ create table tbl1(id int not null primary key,data int,flag tinyint not null); insert into tbl1(id,data) values(1,11),(2,12),(3,13),(5,15),(6,16); create table tbl2(id int not null primary key,data int,flag tinyint not null); insert into tbl2(id,data) values(1,21),(2,22),(4,24),(5,25); //とりあえず確認 select * from tbl1; →flagはすべて0 //limitしないupdate update tbl1,tbl2 set tbl1.flag=1 where tbl1.id=tbl2.id; //確認 select * from tbl1; →3件flagが1になる //1回クリア update tbl1 set tbl1.flag=0; select * from tbl1; →flagはすべて0 //tbl1のid順で上位1件をupdate update tbl1 set flag=1 where id in (select * from (select tbl1.id from tbl1 inner join tbl2 on tbl1.id=tbl2.id order by tbl1.id asc limit 1) as sub); //確認 select * from tbl1; →1件だけflagが1になる ※サブクエリはlimitを利用できないので一度ダミーで処理をいれる
お礼
早々の回答ありがとうございます。 すごい! できました。 意味は理解出来てませんが、エラーは消えて動いてそうです。 SELECT分で絞っているんですね。 subの使い方はあまり理解出来てませんが、Postgreは不要で出来ているようなので SELECTで絞るようなSQL文を記載しましたが、ダメでした。。。 とにかく。ありがとうございます。助かりましたm(_ _)m (もう少し他の方法も待って、なさそうならベストアンサーにさせてもらいます。)