
すみません、MySQLのSQL文で教えてください。
以下のSQL文を実行すると
UPDATE overflag c, asinprice d SET d.priceCheckUS = TRUE WHERE c.asin=d.asin AND c.priceOverUS=0 LIMIT 1;
ERROR 1221 (HY000): Incorrect usage of UPDATE and LIMIT
というエラーが出力されます。
UPDATE asinprice d SET d.priceCheckUS = TRUE WHERE d.asin='111' OR d.asin='000' LIMIT 1;
は実行できました。
複数テーブルだと実行できないように理解しましたが、何が問題か教えてください。
よろしくお願いします。
No.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
(もう少し他の方法も待って、なさそうならベストアンサーにさせてもらいます。)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
select文のwhere句に配列を入れ...
-
エクセルの関数について教えて...
-
入力値と外部キーをINSERTするには
-
PL/SQLの変数について
-
URL と行番号の指定
-
キー毎の、ある列のmaxのレコー...
-
SQLサーバから、項目の属性(型...
-
SQLで残高計算
-
武漢からのチャーター機
-
accessのチェックボックスをSQL...
-
MySQLのint型で001と表示する方...
-
複数テーブルからLIKE検索を行...
-
【Transact-sql】 execの結果を...
-
マイクラPC版のコマンドで効率...
-
”photo id” とは何ぞや?
-
SQLにて特定の文字を除いた検索...
-
所有格の意味
-
レコード削除・sqlインジェクシ...
-
このサイト(ttp://127.0.0.1/p...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
エラー 1068 (42000): 複数の主...
-
エクセルの関数について教えて...
-
VIEWの元のテーブルのindexって...
-
sqlで、600行あるテーブルを100...
-
SQLサーバから、項目の属性(型...
-
SQL Left Join で重複を排除す...
-
Access パラメータクエリをcsv...
-
クエリ表示と、ADOで抽出したレ...
-
ストアドのエラーについて
-
マイクラPC版のコマンドで効率...
-
バインド変数について
-
SQLにて特定の文字を除いた検索...
-
副問合せの書き方について
-
【Transact-sql】 execの結果を...
-
”photo id” とは何ぞや?
-
mysql+phpをつかったカートつく...
-
MySQL5.5 viewの処理速度改善に...
-
select文のwhere句に配列を入れ...
-
テーブル名を省略して「h.id」...
おすすめ情報