重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
SELECT ID, createdate
创新互联是一家专业提供莒县企业网站建设,专注与成都做网站、成都网站制作、成都h5网站建设、小程序制作等业务。10年已为莒县众多企业、政府机构等服务。创新互联专业网站设计公司优惠进行中。
FROM ( SELECT ID,
createdate,
RANK( ) OVER( PARTITION BY ID ORDER BY createdate DESC ) rank_value
FROM test1 )
WHERE rank_value = 2;
DELETE FROM test1
WHERE ROWID IN( SELECT row_id
FROM ( SELECT ROWID row_id,
RANK( ) OVER( PARTITION BY ID ORDER BY createdate DESC ) rank_value
FROM test1 )
WHERE rank_value 2 );
自己研究RANK()和DENSE_RANK()的区别。你或许想用DENSE_RANK()。我不知道如果有多于一行的数据拥有最大(或者第二大)的日期你想怎么办。
你这个写法有问题,oracle不允许这样删除,如果想级联删除有两个方法实现:方法一:触发器解决,方法二:修改你的外键设置,达到级联删除的目的。如果不用级联删除的话就只有一个表一个表的删除,先删除contactcomm表再删除contact 表。
如果关联的两个表一条信息同时删除,可用下列方法。
设关联的外键是ID,先设定外键类型为级联删除。
alter table B add constraint fk_ID foreign key (ID) references A(ID) on delete cascade;
然后delete from A where ID=nnnn; 就可以自动删除对应B表内容了。
设定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)先查询出EMP表和POS表中 外键的名称(如果你知道 外键名这一步可以省略)
select CONSTRAINT_NAME,TABLE_NAME from user_constraints where CONSTRAINT_TYPE ='R' and TABLE_NAME in('EMP','POS');
b)删除EMP表和POS表上的外键后 重新建立允许级联删除的外键模式
alter table EMP drop constraint 外键名;
alter table POS drop constraint 外键名;
alter table EMP add constraint 外键名 foreign key(DEPT_NO) references DEPT(DEPT_NO) on delete cascade;
alter table POS add constraint 外键名 foreign key(DEPT_NO) references DEPT(DEPT_NO) on delete cascade;
这样删除关联删除是自动的
只能一条一条的删除。。先删除子表。然后删除主表。
一种是写两条sql语句。另外一种是写触发器。