UPDATEを使用してテーブルの行の列の列の値を更新しようとしています。問題は、この列の値を導出するためにサブクエリを使用する必要があり、同じ表に依存することです。クエリは次のとおりです。MySQLの同じテーブルを参照するサブクエリを使用したSQL UPDATE
UPDATE user_account student
SET student.student_education_facility_id = (
SELECT teacher.education_facility_id
FROM user_account teacher
WHERE teacher.user_account_id = student.teacher_id AND teacher.user_type = 'ROLE_TEACHER'
)
WHERE student.user_type = 'ROLE_STUDENT';
通常、教師と学生が2つの異なるテーブルにある場合、mysqlは不平を言いません。しかし、彼らは両方とも同じテーブルを使用しているため、MySQLは代わりにこのエラーを吐き出す:
ERROR 1093(HY000):あなたは
があります句から更新のターゲット表「学生」を指定することはできませんがどのように私は更新を行うためにmysqlを強制することができますか?私は100%肯定的なので、行が更新されるとfrom句には影響しません。
もしそうでなければ、私はこのアップデートSQLを書くことができます同じ効果を達成する別の方法はありますか?
ありがとうございます!
編集:私は、私はそれが動作するようになったと思う:
UPDATE user_account student
LEFT JOIN user_account teacher ON teacher.user_account_id = student.teacher_id
SET student.student_education_facility_id = teacher.education_facility_id
WHERE student.user_type = 'ROLE_STUDENT';
2つの解決策があった場合、それはいいだろう:特定の1ビットより抽象的、明確なテーブル名や列名を持つが、見ている人のための読書簡素化するために、私のような一般的な答えのために。いずれにしても、質問と回答の両方が私を満足させていますが、私はコミュニティの理解を深めるためにそれを提案していました。ありがとう、+1に両方とも – Nico
これに@Nicoと完全に同意します。そのため、わかりやすい表名と列名を持つ抽象的な例を提供しました(http://stackoverflow.com/a/23772515/886539)。私もJohn Hartsockの答えをアップvvしました(私の事例をたくさん作りました)。 –