可不可以使用一条sql语句查询出oracle 添加外键数据库各表之间的主外键关系呀

oracle数据库中如何用sql语句查出重复字段以及如何删除?, oracle数据库中如何用sql语句查
oracle数据库中如何用sql语句查出重复字段以及如何删除? 比如我有一个表名字叫student 表有一个字段namename字段有100万条数据 其中有很多重复数据 我如何用sql语句查出重复数据以及如何用sql语句删除重复了的数据(假设有n个name都一样 我只保留一个) 蓝天白云水 oracle数据库中如何用sql语句查出重复字段以及如何删除?
& b.id = b,namefrom studentgroup by name) b where a.name &lt.minid and a假设有一个主键(唯一键)id delete from student awhere exists( select 1 from (select min(id) minid
希望能够帮助到你,count(*) repeatNum
from student group by name having repeatNum & 1
删除重复数据
DELETE tb_affiche WHERE name IN (SELECT name FROM tb_affiche GROUP BY name HAVING COUNT(*) & 1)
AND name not in(SELECT distinct name FROM tb_affiche GROUP BY name HAVING COUNT(*) &gt查询重复数据
select name
delete from student where rowID not in(select Max(rowID) from student
group by sname)当前访客身份:游客 [
当前位置:
我想通过相关的id来查询到第二条数据,如下sql虽然能够实现但觉得太繁琐,有没有更好的实现方式?
SELECT B.type_id,B.ENDO_ID FROM (select rownum rn,A.endo_id ,A.TYPE_ID from (SELECT t.endo_id endo_id,t.policy_id,t.type_id FROM t_gedo_endorsement t where t.policy_id =? ORDER BY t.endo_id DESC)A)B where B.rn =2;
共有2个答案
<span class="a_vote_num" id="a_vote_num_
i don't know what you want.
--- 共有 1 条评论 ---
I only Want to get the second record througt the id,but i feel
(2年前)&nbsp&
<span class="a_vote_num" id="a_vote_num_
比这复杂的SQL多了去了,我想这个语句执行不会慢吧。没什么问题呀,想再简单点就用row_number() over()了。
--- 共有 1 条评论 ---
我只是想知道假如我要实现这个查询,有没有比这条Sql简单的语句
(2年前)&nbsp&
有什么技术问题吗?
pigpig5...的其他问题
类似的话题服务热线:400-702-1168 ()
您好,访客
||||||||||
在Oracle中如何利用Rowid查找和删除表中的重复记录-数据库专栏,ORACLE
发布时间: 21:45:07&&来源:&&作者:&&点击:701
平时工作中可能会遇到当试图对库表中的某一列或几列创建唯一索引时,系统提示 ora-01452 :不能创建唯一索引,发现重复记录。 下面总结一下几种查找和删除重复记录的方法(以表cz为例):表cz的结构如下:sql& desc cz&name&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& null?&&& type&----------------------------------------- -------- ------------------&c1&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& number(10)&c10&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& number(5)&c20&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& varchar2(3)删除重复记录的方法原理: (1).在oracle中,每一条记录都有一个rowid,rowid在整个数据库中是唯一的,rowid确定了每条记录是在oracle中的哪一个数据文件、块、行上。(2).在重复的记录中,可能所有列的内容都相同,但rowid不会相同,所以只要确定出重复记录中那些具有最大rowid的就可以了,其余全部删除。重复记录判断的标准是:c1,c10和c20这三列的值都相同才算是重复记录。经查看表cz总共有16条记录:sql&set pagesize 100sql&select *&&&&&&&& c1&&&&&&& c10 c20---------- ---------- ---&&&&&&&& 1&&&&&&&&& 2&&&dsf&&&&&&&& 1&&&&&&&&& 2&&&dsf&&&&&&&& 1&&&&&&&&& 2&& dsf&&&&&&&& 1&&&&&&&&& 2&& dsf&&&&&&&& 2&&&&&&&&& 3&& che&&&&&&&& 1&&&&&&&&& 2&& dsf&&&&&&&& 1&&&&&&&&& 2&& dsf&&&&&&&& 1&&&&&&&&& 2&& dsf&&&&&&&& 1&&&&&&&&& 2&& dsf&&&&&&&& 2&&&&&&&&& 3&& che&&&&&&&& 2&&&&&&&&& 3&& che&&&&&&&& 2&&&&&&&&& 3&& che&&&&&&&& 2&&&&&&&&& 3&& che&&&&&&&& 3&&&&&&&&& 4&& dff&&&&&&&& 3&&&&&&&&& 4&& dff&&&&&&&& 3&&&&&&&&& 4&& dff&&&&&&&& 4&&&&&&&&& 5&& err&&&&&&&& 5&&&&&&&&& 3&& dar&&&&&&&& 6&&&&&&&&& 1&& wee&&&&&&&& 7&&&&&&&&& 2&& zxc20 rows selected.1.查找重复记录的几种方法:(1).sql&select * from cz group by c1,c10,c20 having count(*) &1;&&&&&&& c1&&&&&&& c10 c20---------- ---------- ---&&&&&&&& 1&&&&&&&&& 2&& dsf&&&&&&&& 2&&&&&&&&& 3&& che&&&&&&&& 3&&&&&&&&& 4&& dff(2).sql&select distinct *&&&&&&& c1&&&&&&& c10 c20---------- ---------- ---&&&&&&&& 1&&&&&&&&& 2&& dsf&&&&&&&& 2&&&&&&&&& 3&& che&&&&&&&& 3&&&&&&&&& 4&& dff(3).sql&select * from cz a where rowid=(select max(rowid) from cz where c1=a.c1 and c10=a.c10 and c20=a.c20);&&&&&&& c1&&&&&&& c10 c20---------- ---------- ---&&&&&&&& 1&&&&&&&&& 2&& dsf&&&&&&&& 2&&&&&&&&& 3&& che&&&&&&&& 3&&&&&&&&& 4&& dff2.删除重复记录的几种方法:(1).适用于有大量重复记录的情况(在c1,c10和c20列上建有索引的时候,用以下语句效率会很高):sql&delete cz where (c1,c10,c20) in (select c1,c10,c20 from cz group by c1,c10,c20 having count(*)&1) and rowid not in(select min(rowid) from cz group by c1,c10,c20 having count(*)&1);sql&delete cz where rowid not in(select min(rowid) from cz group by c1,c10,c20);(2).适用于有少量重复记录的情况(注意,对于有大量重复记录的情况,用以下语句效率会很低):sql&delete from cz a where a.rowid!=(select max(rowid) from cz b where a.c1=b.c1 and a.c10=b.c10 and a.c20=b.c20);sql&delete from cz a where a.rowid&(select max(rowid) from cz b where a.c1=b.c1 and a.c10=b.c10 and a.c20=b.c20);sql&delete from cz a where rowid &(select max(rowid) from cz& where c1=a.c1 and c10=a.c10 and c20=a.c20);(3).适用于有少量重复记录的情况(临时表法):sql&create table test as select distinct * (建一个临时表test用来存放重复的记录)sql&& (清空cz表的数据,但保留cz表的结构)sql&insert into cz select *& (再将临时表test里的内容反插回来)(4).适用于有大量重复记录的情况(exception into 子句法):采用alter table 命令中的 exception into 子句也可以确定出库表中重复的记录。这种方法稍微麻烦一些,为了使用&#8220;excepeion into &#8221;子句,必须首先创建 exceptions 表。创建该表的 sql 脚本文件为 utlexcpt.sql 。对于win2000系统和 unix 系统, oracle 存放该文件的位置稍有不同,在win2000系统下,该脚本文件存放在$oracle_home\oraArray0\rdbms\admin 目录下;而对于 unix 系统,该脚本文件存放在$oracle_home/rdbms/admin 目录下。具体步骤如下:sql&@?/rdbms/admin/utlexcpt.sqltable created.sql&desc exceptions&name&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& null?&&& type&----------------------------------------- -------- --------------&row_id&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& rowid&owner&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& varchar2(30)&table_name&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&varchar2(30)&constraint&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&varchar2(30)sql&alter table&cz add constraint& cz_unique unique(c1,c10,c20) except&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*error at line 1:ora-022ArrayArray: cannot validate (test.cz_unique) - duplicate keys foundsql&create table dups&as select * from&cz where rowid in (select row_id from exceptions); table created.sql&select * &&&&&&& c1&&&&&&& c10 c20---------- ---------- ---&&&&&&&& 1&&&&&&&&& 2&& dsf&&&&&&&& 1&&&&&&&&& 2&& dsf&&&&&&&& 1&&&&&&&&& 2 & dsf&&&&&&&& 1&&&&&&&&& 2&& dsf&&&&&&&& 2&&&&&&&&& 3&& che&&&&&&&& 1&&&&&&&&& 2&& dsf&&&&&&&& 1&&&&&&&&& 2&& dsf&&&&&&&& 1&&&&&&&&& 2&& dsf&&&&&&&& 1&&&&&&&&& 2&& dsf&&&&&&&& 2&&&&&&&&& 3&& che&&&&&&&& 2&&&&&&&&& 3&& che&&&&&&&& 2&&&&&&&&& 3&& che&&&&&&&& 2&&&&&&&&& 3&& che&&&&&&&& 3&&&&&&&&& 4&& dff&&&&&&&& 3&&&&&&&&& 4&& dff&&&&&&&& 3&&&&&&&&& 4&& dff16 rows selected.sql&select row_row_id------------------aaahd/aaiaaaadsaaaaaahd/aaiaaaadsaabaaahd/aaiaaaadsaacaaahd/aaiaaaadsaafaaahd/aaiaaaadsaahaaahd/aaiaaaadsaaiaaahd/aaiaaaadsaagaaahd/aaiaaaadsaadaaahd/aaiaaaadsaaeaaahd/aaiaaaadsaajaaahd/aaiaaaadsaakaaahd/aaiaaaadsaalaaahd/aaiaaaadsaamaaahd/aaiaaaadsaanaaahd/aaiaaaadsaaoaaahd/aaiaaaadsaap16 rows selected.sql&delete from cz where rowid in ( select row_id from exceptions);16 rows deleted.sql&insert into cz select distinct *3 rows created.sql&select *&&&&&&&& c1&&&&&&& c10 c20---------- ---------- ---&&&&&&&& 1&&&&&&&&& 2&& dsf&&&&&&&& 2&&&&&&&&& 3&& che&&&&&&&& 3&&&&&&&&& 4&& dff&&&&&&&& 4&&&&&&&&& 5&& err&&&&&&&& 5&&&&&&&&& 3&& dar&&&&&&&& 6&&&&&&&&& 1&& wee&&&&&&&& 7&&&&&&&&& 2&& zxc7 rows selected.从结果里可以看到重复记录已经删除。
以上内容由
搜集整理,如转载请注明原文出处,并保留这一部分内容。
  “华夏名网”
是成都飞数科技有限公司的网络服务品牌,专业经营虚拟主机,域名注册,VPS,服务器租用业务。公司创建于2002年,经过6年的高速发展,“华夏名网”已经成为我国一家知名的互联网服务提供商,被国外权威机构评价为十大IDC服务商之一。
华夏名网网址导航:
上一篇:下一篇:
(4915次点击) (2767次点击) (4157次点击) (2792次点击) (2365次点击) (3724次点击) (3565次点击) (2358次点击) (2527次点击) (2437次点击)
(3413次点击) (3231次点击) (3242次点击) (3987次点击) (2403次点击) (2318次点击) (3208次点击) (3615次点击) (2348次点击) (2331次点击)
&2002- 飞数科技 版权所有
电话总机:028-91 94
公司地址:四川省成都市青龙街51号倍特康派大厦10楼5号用你熟悉的语言写一个连接ORACLE数据库的程序,能够完成修改和查询工作 - Java面试题 - 职友集(发现中国好公司)
<meta name="description" content="JDBC示例程序如下:
public void testJdbc()&#123;
Connection con = n..." />
用你熟悉的语言写一个连接ORACLE数据库的程序,能够完成修改和查询工作
阅读( 235 )
JDBC示例程序如下:
public void testJdbc()&#123;
Connection con =
PreparedStatement ps =
ResultSet rs =
//step1:注册驱动;
Class.forName(&#8220;oracle.jdbc.driver.OracleDriver&#8221;);
//step 2:获取数据库连接;
con=DriverManager.getConnection(
&#8220;jdbc:oracle:thin:@192.168.0.39:1521:TARENADB&#8221;,
&#8220;sd;,&#8221;sd;);
/*******************************查 询******************************/
//step 3:创建Statement;
String sql = &#8220;SELECT id, fname, lname, age, FROM Person_Tbl&#8221;;
ps = con.prepareStatement(sql);
//step 4:执行查询语句,获取结果集;
rs = ps.executeQuery();
//step 5:处理结果集—输出结果集中保存的查询结果;
while (rs.next())&#123;
System.out.print(&#8220;id = &#8221; + rs.getLong(&#8220;id&#8221;));
System.out.print(&#8221; , fname = &#8221; + rs.getString(&#8220;fname&#8221;));
System.out.print(&#8221; , lname = &#8221; + rs.getString(&#8220;lname&#8221;));
System.out.print(&#8221; , age = &#8221; + rs.getInt(&#8220;age&#8221;));
/*******************************JDBC 修 改*********************/
sql = &#8220;UPDATE Person_Tbl SET age=23 WHERE id = ?&#8221;;
ps = con.prepareStatement(sql);
ps.setLong(1, 88);
int rows = ps.executeUpdate();
System.out.println(rows + &#8221; rows affected.&#8221;);
&#125; catch (Exception e)&#123;
e.printStackTrace();
&#125; finally&#123;
con.close(); //关闭数据库连接,以释放资源。
&#125; catch (Exception e1) &#123;
分享给朋友:
亲~ 如果您有更好的答案 可在评论区发表您独到的见解。
您想查看更多的信息:
Java面试题目推荐
微信公众号
手机适配版}

我要回帖

更多关于 oracle 添加外键 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信