β

解决MySQL SQL语句出现#1093错误

LixiPHP 446 阅读

今天遇到一个MySQL SQL语句问题 #1093,需要记录一下。

我使用了这样一个SQL:

UPDATE `student_quiz_answer` SET `article_id`= (SELECT qa.article_id, sqa.answer_id FROM student_quiz_answer sqa LEFT JOIN `quiz_answer` qa ON sqa.answer_id = qa.answer_id where qa.article_id > 0)

问题来自MySQL更新Table某个字段时,如果 Update 值中存在自身Table 的 Select 就会遇到这个错误提示:

#1093 – You can’t specify target table ‘student_quiz_answer’ for update in FROM clause

但是SQL的 Update 值又必须根据当前Table的字段进行查询。

MySQL-sql-1093-error #1093 - You can't specify target table for update in FROM clause

解决方法

把 Update 值作为一个新 Table,比如 t2,本身 table 别名为 t1。条件子句就是 t1 和 t2 的关联值相等。

于是修改为这样一个 SQL 语句:

UPDATE `student_quiz_answer` t1, (SELECT qa.article_id, sqa.answer_id FROM student_quiz_answer sqa LEFT JOIN `quiz_answer` qa ON sqa.answer_id = qa.answer_id where qa.article_id > 0) t2  SET t1.`article_id`= t2.article_id WHERE t1.answer_id = t2.answer_id

OK了,相当于弄个临时表,再弄个别名,再进行更新。

(...)
Read the rest of 解决MySQL SQL语句出现#1093错误 (1 words)


© lixiphp for LixiPHP, 2013. | Permalink | No comment | Add to del.icio.us
Post tags: #1093, SQL, Update

Feed enhanced by Better Feed from Ozh

作者:LixiPHP
专注于建设高品质网站!
原文地址:解决MySQL SQL语句出现#1093错误, 感谢原作者分享。