有时候,删除一张表的数据需要根据另外一张表数据为依据来删除表中的数据。以下就以几种方式来实现该功能。
以下语句在mysql数据库下验证:
第一种方式:
delete ufi from
user_finger_info ufi ,user_info ui
where ufi.userid=ui.id and ui.id=32;
第二种方式:
delete ufi from
user_finger_info_copy ufi inner join user_info ui
on ufi.userid=ui.id where ui.id=31;
第三种方式:
(注意这里from表不能加别名,不然会报错)
delete from
user_finger_info_copy where
exists (select * from user_info ui where user_finger_info_copy.userId=ui.id and ui.id=30)
第四种方式:
(注意这里from表不能加别名,不然会报错)
delete from
user_finger_info_copy where
userid in (select id from user_info ui where ui.id=27)
oracle数据库不支持上述第一、第二种方式,它可以使用第三种以及第四种方式完成,并且支持表加别名。
第一种方式:
delete
from sc sc1 where exists (
select * from student s
where sc1.id=s.id and
s.id=1);
第二种方式:
delete
from sc sc1 where sc1.id in (
select id from student s
where s.id=1);
第三种方式,参考http://blog.itpub.net/29378313/viewspace-1064071/
以匿名表方式:
http://blog.itpub.net/29378313/viewspace-1064071/
delete
from (select 1 from
student s,sc sc1
where sc1.id=s.id and s.id=1);
这里不管你是把student表放前,或者sc表放前(即谁为主表),删除的都是SC表的数据,不会删除student表的数据。具体数据库内部机制不了解。请各位解答。谢谢!