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不...