2

max特定の列の値を設定しようとしましたが、うまくいきません。どこが間違っているのかわかりません。

UPDATE `upload_video` 
             SET order_id ='select max(order_id)+1 
             FROM upload_video' 
             WHERE `video_id` = 22

これは私のクエリselect max(order_id)+1 from upload_videoです。クエリを個別に実行すると、結果が得られます。しかし、このクエリを更新クエリで使用すると、クエリはエラーなしで実行されます。しかし、order_idが正しく更新されていません。私を助けてください

4

3 に答える 3

4

ステートメントにタイプミスがあります。UPADTE代わりにを使用しましたUPDATE

1 つの問題は、サブクエリを引用しないことです。一重引用符を使用しました。これは、式select max(order_id)+1...がテキスト リテラル (varchar) として解釈されたことを意味します。しかし、あなたは明らかにそれを望んでいません(order_idは数字だと思います)。代わりに必要なのは、サブクエリを評価することです。ただし、試してみると:

UPDATE `upload_video` 
         SET order_id =(select max(order_id)+1 
         FROM upload_video) 
         WHERE `video_id` = 22

その後、MySQL はそれを許可しません (私はそれについて知りませんでした)。PostgreSQL などの他のデータベースでは許可されています。したがって、次の 2 つのステートメントが必要になる場合があります。

select @id = coalesce(max(order_id), 0) + 1 FROM upload_video;
UPDATE `upload_video` SET order_id = @id WHERE `video_id` = 22;

これは MySQL では機能しますが、他のデータベースでは機能しないことに注意してください。

于 2013-09-02T09:33:10.567 に答える
4

クエリは標準 SQL でほぼ正しいです。()アポストロフィの代わりに角かっこを使用するだけで済みます'

SET order_id = (SELECT MAX(...) ...)

ただし、MySQL では、同じテーブルから選択しているときにテーブルを更新することはできません。回避策は、必要な値を計算するサブクエリを使用し、サブクエリを更新する必要があるテーブルに結合することです。

UPDATE
  upload_video JOIN (SELECT COALESCE(MAX(order_id),0)+1 max_id
                     FROM upload_video) s
SET
  upload_video.order_id=s.max_id
WHERE
  video_id=22

ここでフィドルを参照してください。

于 2013-09-02T09:43:36.390 に答える
1

これを試して:

UPDATE `upload_video` 
SET order_id =(select COALESCE(max(U2.order_id),0)+1 
         FROM upload_video U2)
WHERE `video_id` = 22

MySql は UPDATE とサブクエリで同じテーブルを使用したくないため、このクエリはエラーになります。

あなたの場合は、2 つのクエリを書いてください。

1 つ目は最大値を取得し、2 つ目は更新します

于 2013-09-02T09:34:14.817 に答える