
すみません、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も見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
エクセルの関数について教えて...
-
VIEWの元のテーブルのindexって...
-
inner joinをすると数がおかし...
-
曜日ごとのカウントの平均を求...
-
SQL Left Join で重複を排除す...
-
[SQLServer] テーブル名からカ...
-
NOT INをNOT EXISTSで書き直したい
-
複数のカラムの中から最大値を...
-
エラー 1068 (42000): 複数の主...
-
select文のwhere句に配列を入れ...
-
PL/SQLの変数について
-
期間の重複を調べるSQL文につい...
-
MYSQLを用いた集計について
-
MySQLのデータをPHPで整理して...
-
Updateの複数テーブル条件時のL...
-
mysql_fetch_arrayとテンプレー...
-
group byを使う時に条件をつけ...
-
insert後のプライマリキーの取得
-
複数テーブルの削除
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
エクセルの関数について教えて...
-
select文のwhere句に配列を入れ...
-
VIEWの元のテーブルのindexって...
-
エラー 1068 (42000): 複数の主...
-
SQLにて特定の文字を除いた検索...
-
【Transact-sql】 execの結果を...
-
マイクラPC版のコマンドで効率...
-
SQL Left Join で重複を排除す...
-
sqlで、600行あるテーブルを100...
-
複数テーブルのGROUP BY の使い...
-
WordpressのContact form 7でzi...
-
クエリ表示と、ADOで抽出したレ...
-
SQLサーバから、項目の属性(型...
-
selectした大量データをinsert...
-
Access パラメータクエリをcsv...
-
副問合せの書き方について
-
inner joinをすると数がおかし...
-
insertを高速化させたい
-
[MySQL] 3つのテーブルの結合で...
おすすめ情報