1
マークシートと呼ばれる生徒のスコア表があります。同じMySQLテーブルのサブクエリから一時フィールドを更新するにはどうすればいいですか?(MySqlエラー#1093を避けて)
id | student | score | position
1 | Adora | 50 |
2 | Sam | 76 |
3 | Frank | 40 |
SELECT id, 1+(SELECT count(*) from marksheet a WHERE a.score >
b.score) as student_rank
FROM marksheet b
id | student | score | student_rank
1 | Adora | 50 | 2
2 | Sam | 76 | 1
3 | Frank | 40 | 3
問題は、ランキングクエリと更新クエリを同時に実行することです。私はランクを位置としてテーブルに保存します。 だから私は実行します。
UPDATE marksheet AS marks SET marks.position =
(SELECT id, 1+(SELECT count(*) from marksheet a WHERE a.score >
b.score) as student_rank
FROM marksheet b) ;
MySQLは言った:
#1093 - Table 'marksheet' is specified twice, both as a target for
'UPDATE' and as a separate source for data
私は自分自身のサブクエリでテーブルを更新する似たようなケースのためのstackoverflowを通じて閲覧しています。私は1つまたは2つのことを学んだ多くの例に出くわしましたが、成功していない例を適用しようとしました。どんな提案も深く感謝しています。
あなたはmarksheetテーブルのエイリアスを使用して、元のテーブルでそれを登録しよう、次のようにする必要があると思います
高く評価されています。私はそれを理解できなかった。私はJOINについてもっと読む必要があると思います。どうもありがとうございました。それは魔法のように機能します。私はすでにPHPの効率を損なうことを考えていました。私はとてもうれしい。これは最高です。 – Nditah
@SamRansあなたは大歓迎です、私はあなたのために働いてうれしいです。 UPDATEは、SELECTを実行している同じテーブルでは使用できません。だからエイリアスを作ってから参加しなければならないのです。 –