mysql中You can’t specify target table for update in FROM clau_MySQL教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:MySQL查詢和修改auto_increment的方法
      本文實例講述了MySQL查詢和修改auto_increment的方法。分享給大家供大家參考。具體如下: 查詢表名為tableName的auto_increment值: 代碼如下:SELECT AUTO_INCREMENT FROM information_schema.tables WHERE table_name=tableName; 修改表名為tableName的auto_increment

       mysql中You can't specify target table for update in FROM clause錯誤的意思是說,不能先select出同一表中的某些值,再update這個表(在同一語句中)。 例如下面這個sql:

      代碼如下:
      delete from tbl where id in 
      (
              select max(id) from tbl a where EXISTS
              (
                  select 1 from tbl b where a.tac=b.tac group by tac HAVING count(1)>1
              )
              group by tac
      )

       

      改寫成下面就行了:

       

      代碼如下:
      delete from tbl where id in 
      (
          select a.id from 
          (
              select max(id) id from tbl a where EXISTS
              (
                  select 1 from tbl b where a.tac=b.tac group by tac HAVING count(1)>1
              )
              group by tac
          ) a
      )

       

      也就是說將select出的結果再通過中間表select一遍,這樣就規避了錯誤。注意,這個問題只出現于mysql,mssql和oracle不會出現此問題。

      分享:MySQL中的if和case語句使用總結
      Mysql的if既可以作為表達式用,也可在存儲過程中作為流程控制語句使用,如下是做為表達式使用: IF表達式 代碼如下: IF(expr1,expr2,expr3) 如果 expr1 是TRUE (expr1 0 and expr1 NULL),則 IF()的返回值為expr2; 否則返回值則為 expr3。IF() 的返回值為數字值或字符

      來源:模板無憂//所屬分類:MySQL教程/更新時間:2015-03-07
      相關MySQL教程