MySQL4中巢狀子查詢刪除出錯解決方案

2021-09-22 04:46:14 字數 1378 閱讀 1560

mysql4中巢狀子查詢做刪除操作會出錯,例如下面的sql:

delete

from moviesparam 

where mpeg 

in (

select mp.mpeg 

from movies mv, moviesparam mp 

where mv.mpeg = mp.mpeg) 

錯誤碼: 1093 

you can't specify target table 'moviesparam' for update in from clause

原因:所刪除表的在子查詢**現,就會出錯,當然,此sql放到mysql5中執行是沒有問題的。

為了解決此問題,可以建立一張臨時表,將子查詢的資料寫入到臨時表,然後做子查詢刪除即可。

當然,此處的臨時表並被真是真正意義的臨時表,是臨時建立乙個表,用完後再刪除。**如下:

drop

table

ifexists tmp_del_mp; 

create

table tmp_del_mp 

asselect mpeg 

from moviesparam 

where mpeg 

notin (

select mpeg 

from movies); 

delete

from moviesparam 

where mpeg 

in (

select mpeg 

from tmp_del_mp); 

drop

table

ifexists tmp_del_mp;

這樣就變相的實現了所要實現的功能。

將上面的sql放置到jdbc**中執行:

statement stmt = conn.createstatement();    

stmt.addbatch(

"drop table if exists tmp_del_mp");    

stmt.addbatch(

"create table tmp_del_mp as\n" +    

"select mpeg from moviesparam where mpeg not in (select mpeg from movies)");    

stmt.addbatch(

"delete from moviesparam where mpeg in (select mpeg from tmp_del_mp)");    

stmt.addbatch(

"drop table if exists tmp_del_mp");    

stmt.executebatch();

MySQL中巢狀子查詢刪除出錯解決方案

mysql中巢狀子查詢做刪除操作會出錯,例如下面的sql delete from table1 where number in select number from table2 錯誤碼 1093 原因 所刪除表的在子查詢中出現,就會出錯,當然,此sql放到mssql中執行是沒有問題的。為了解決此問...

php在mysql中查詢資料 4中方式

一共四種方法,詳細如下 一 使用mysql result 獲取查詢記錄集 原型如下 string mysql result int result,int row,mixed filed 引數說明如下 1 result 由函式mysql query 或mysql db query 返回的結果標識,用來...

mysql刪除多表中查詢出來的資料

它文中的第三點是這樣寫的 3 從兩個表中找出相同記錄的資料並把兩個表中的資料都刪除掉 delete t1,t2 from t1 left join t2 on t1.id t2 id where t1.id 25 注意此處的delete t1,t2 from 中的t1,t2不能是別名 說t1,t2不...