oracle 删除关联表数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 删除关联表数据相关的知识,希望对你有一定的参考价值。

emp表
eid ename deptno
101 aaa 10
102 bbb 10
103 ccc 20
104 ddd 20

dept表
did deptno city
1 10 beijing
2 20 shanghai

删除DEPT表中城市名是上海,并且删除EMP表中关联的数据
给出具体方法.谢谢
最好是一句SQL语句

设定dept表deptno列为主键。
alter table dept add constraint pk_deptno primary key (deptno);
在emp表deptno列上建立外键引用dept表deptno,指定外键类型为级联删除。
alter table emp add constraint fk_deptno foreign key (deptno) references dept(deptno) on delete cascade;
这样删除dept表 只需:delete from dept where city='shanghai'; 就可以自动删除对应emp表内容。
参考技术A 删除dept表中的数据:
delete from dept t where t.city = 'shanghai'

删除与之关联的emp表中的数据:
delete from emp e where e.deptno in ( select t.deptno from dept t where t.city = 'shanghai' )

删主键值之前,必须先删掉它的外键,这两条SQL的执行顺序楼主自己调一下。
参考技术B delete from dept a inner join on emp b on a.deptno=b.deptno where a.city='shanghai' 你试试吧!希望有用!

oracle删除关联表的数据,如何删除啊!下面是我写的SQL,不知道哪里出问题了,就是运行不了!

delete from contactcomm tcc,contact tc where tcc.lid=tc.lid and trunc(tc.createtime) >= ADD_MONTHS(trunc(sysdate), -1)

谢谢大侠们了!

参考技术A 你这个写法有问题,oracle不允许这样删除,如果想级联删除有两个方法实现:方法一:触发器解决,方法二:修改你的外键设置,达到级联删除的目的。如果不用级联删除的话就只有一个表一个表的删除,先删除contactcomm表再删除contact 表。 参考技术B oracle不允许delete多张表的操作,如果要删除两个表关联的记录可分步进行:

delete from contactcomm tcc where tcc.lid in (select tc.lid from contact tc where trunc(tc.createtime) >= ADD_MONTHS(trunc(sysdate), -1));

delete from contact tc where trunc(tc.createtime) >= ADD_MONTHS(trunc(sysdate), -1);
commit;本回答被提问者采纳

以上是关于oracle 删除关联表数据的主要内容,如果未能解决你的问题,请参考以下文章

Oracle中,多表关联删除该怎么写?

求oracle中查询关联查询不同数据在另一表作为相同字段的对应的值

oracle 如何快速删除两表非关联数据(脏数据)?

oracle删除关联表的数据,如何删除啊!下面是我写的SQL,不知道哪里出问题了,就是运行不了!

多表级联删除表数据特别慢

[oracle]两表关联的update操作问题