![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
すみません、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で質問しましょう!
似たような質問が見つかりました
- Access(アクセス) アクセス テーブルの空白を変数に置換するボタンが作りたい 4 2022/07/08 11:19
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- MySQL PhpMyAdminで作成して実行せよ。 東京23区を、皇居を中心とした4つのエリア(南東, 南西, 1 2023/06/11 11:58
- MySQL うまくいきません教えてくださいお願いしますSQLです。クエリ構文です。 1 2023/07/07 12:39
- MySQL SQLです。下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 「昨年の各月の総降 1 2023/07/01 00:32
- PostgreSQL SQLでUPSERTを一度に複数行やる方法 3 2022/03/25 15:17
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- Oracle SQL update方法 2 2022/06/22 14:07
- MySQL 下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 日本の全市区町村を人口密度が低 1 2023/06/18 19:51
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
SQL Left Join で重複を排除す...
-
SQLサーバから、項目の属性(型...
-
select文のwhere句に配列を入れ...
-
MySQLのDATE型カラム値がNULLの...
-
VIEWの元のテーブルのindexって...
-
sqlで、600行あるテーブルを100...
-
VMware Player でCD-ROMドライ...
-
[MySQL] UNIQUE制約の値を更新...
-
「Duplicate entry '1' for key...
-
MySQLのint型で001と表示する方...
-
insertを高速化させたい
-
JOIN後同一名カラムから値がと...
-
ある条件の最大値+1を初番する...
-
エクセルの関数について教えて...
-
PL/SQLの変数について
-
入力値と外部キーをINSERTするには
-
時給毎の勤務時間を求めるSQL
-
MySQLでvarcharに先頭ゼロをセ...
-
ローカルルーターモードとは
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
副問合せの書き方について
-
SQLサーバから、項目の属性(型...
-
SQL Left Join で重複を排除す...
-
select文のwhere句に配列を入れ...
-
VIEWの元のテーブルのindexって...
-
PL/SQLの変数について
-
マイクラPC版のコマンドで効率...
-
エクセルの関数について教えて...
-
SQLにて特定の文字を除いた検索...
-
sqlで、600行あるテーブルを100...
-
Access パラメータクエリをcsv...
-
Unionした最後にGROUP BYを追加...
-
inner joinをすると数がおかし...
-
複数テーブルのGROUP BY の使い...
-
ある条件の最大値+1を初番する...
-
MySQLのint型で001と表示する方...
-
クエリ表示と、ADOで抽出したレ...
-
[MySQL] UNIQUE制約の値を更新...
-
テーブル名を省略して「h.id」...
おすすめ情報