当前位置:数据库 > MySQL >>

MySQL SQL UPDATE语句出现#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的字段进行查询。


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

正确实现方法,需要建立一张中间表,中间表的内容和frjg表完全相同,之后进行修改frjg表,中间和frjg表之间存在“主外键关系”(并不存在这种关系),修改为这样一个 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

总结

1093错误为:但修改一个表的时候子查询不能是同一个表,解决办法:把子查询再套一层,变成原来表的孙子查询就可以了,例如:

insert into  gg  set id3= (select c.a+1  from (select max(id3) as a  from gg) c)   这是对的
但是 insert into  gg  set id3= (select max(id3) as a  from gg) 就会报1093错误

补充:数据库,mysql教程 
Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,