难题!求达人解决!!

ymlb123 2007-09-13 09:52:41
废话少说,问题如下

--创建测试表
create table test(
num1 number(4),
num2 number(4)
)

--插入数据
insert into test values(1,1);
insert into test values(1,2);
insert into test values(1,3);
insert into test values(2,1);
insert into test values(2,2);
insert into test values(2,3);
insert into test values(3,1);
insert into test values(3,2);
insert into test values(3,3);
--插入重复项
insert into test values(1,1);
insert into test values(1,1);
insert into test values(2,3);

问题:查询所有重复的项.不能使用表内的字段名,如: select * from test where num1=1 and num2=2;
可以使用到任何表上,只需换掉表名即可,可以使用伪列rowid等
...全文
110 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ymlb123 2007-09-15
  • 打赏
  • 举报
回复
看错了,一楼的答案是正确的,才发现我的数据插入有错,汗

二楼答案比较好,把表的所有字段名全查出来,再 group by,高手!游标写得非常的淫荡!
OK!给分!
ymlb123 2007-09-15
  • 打赏
  • 举报
回复
一楼大哥查出来的结果是
num1 num2
1 1 1
2 2 1
3 3 1
而正确答案是 num1=1,num2=1 有三个重复行
num1=3,num2=1 有二个重复行

ymlb123 2007-09-15
  • 打赏
  • 举报
回复
dragon188(兰若寺) ( )
这个,我想该可以用字段名,但是字段名如果多了的话,一样也查不出来
比方说,你用了num1和num2,如果这时候换张表,表里多了个num3,或者多了num3,num4,你又怎么查,这时候知道字段名也是没有的

另外一楼大哥和二楼大哥,你们换张表试过吗,加几个字段名再查查,结果。。。
dragon188 2007-09-14
  • 打赏
  • 举报
回复
不能使用字段名? 你太有才了,教教我吧
wenzhai 2007-09-14
  • 打赏
  • 举报
回复
--在Test窗口执行,参数:table_name (string 类型)为表名如test, :result_cur 为返回结果游标(Cursor类型)
DECLARE
strTable VARCHAR2(50):= UPPER(:table_name);
CURSOR cur IS
SELECT c.column_name
FROM All_Tab_Cols c
WHERE c.table_name = strTable;
strGroup VARCHAR2(200) := '';
strSql VARCHAR2(2000) := 'select * from ' || strTable;

BEGIN
FOR cur_row IN cur
LOOP
strGroup := strGroup || cur_row.column_name || ', ';
END LOOP;

IF strGroup IS NOT NULL THEN
strSql := strSql || ' group by ' || TRIM(TRAILING ',' FROM TRIM(strGroup)) ||
' having count(*) > 1';
END IF;

OPEN :result_cur FOR strSql;
END;
christophe 2007-09-13
  • 打赏
  • 举报
回复
select num1, num2 from test group by num1, num2 having count(*)>1不知道是否满足你的条件

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧