mysql操作中 出现You can‘t specify target table for update in FROM clause错误的解决方法

这个错误实际上也不能称之为咱们sql语句写的不行,实际上是我们在一些细节上没有遵循mysql的语法规范。

问题所在:我们一个sql语句中先select这个表,然后再update这个表的内容。

错误示范:

UPDATE StuCose
SET Grade=60
WHERE Sno IN(
          SELECT Sno
		  FROM stucose 
		   WHERE Grade<=ALL(
			    SELECT MIN(Grade)
			    FROM stucose s2
			    WHERE  s2.Cno IN(
				SELECT Cno
				FROM cose
				WHERE Cname='DS'
			    ) 
		  )
)  
;

正确示范: 我们应该可以把从这个表中select到的数据当作一个新表,在使用一下select语句进行一下查询,如下面这样:

UPDATE StuCose
SET Grade=60
WHERE Sno IN(
	 SELECT Sno
	 FROM (
		 SELECT Sno
		  FROM stucose 
		   WHERE Grade<=ALL(
			    SELECT MIN(Grade)
			    FROM stucose s2
			    WHERE  s2.Cno IN(
				SELECT Cno
				FROM cose
				WHERE Cname='DS'
			    ) 
		  )) AS a
	  
)  
;

eg:目前我只在mysql中遇到过这个问题,所以有什么学习问题,欢迎同学们在评论区留言讨论。 

你可能感兴趣的:(学习问题,mysql,sql,经验分享)