两个表的行数相同,合并两个表中的列,组成一个新表,如何保证没有重复的数据?
例如
我建立了一个游标
CURSOR X IS SELECT distinct m.column_value s_names, distinct n.column_value s_values
FROM TABLE (CAST (FN_SPLIT (P_STR_NAME, '|') AS TY_STR_SPLIT)) m,
TABLE (CAST (FN_SPLIT (P_STR_VALUE, '|') AS TY_STR_SPLIT_VALUE)) n;目前的问题是:
表m中的数据是
aaaa
bbbb
cccc
表n中的数据是
0.1001
0.231
0.3011经过上面游标查询后,出来的数据有重复:
aaaa0.1001
aaaa0.231
aaaa0.3011
bbbb0.1001
bbbb0.231
bbbb0.3011
......
请问如何改写这个游标,查出来的数据能够变成:
aaaa0.1001
bbbb0.231
cccc0.3011在线等,立刻给分。
例如
我建立了一个游标
CURSOR X IS SELECT distinct m.column_value s_names, distinct n.column_value s_values
FROM TABLE (CAST (FN_SPLIT (P_STR_NAME, '|') AS TY_STR_SPLIT)) m,
TABLE (CAST (FN_SPLIT (P_STR_VALUE, '|') AS TY_STR_SPLIT_VALUE)) n;目前的问题是:
表m中的数据是
aaaa
bbbb
cccc
表n中的数据是
0.1001
0.231
0.3011经过上面游标查询后,出来的数据有重复:
aaaa0.1001
aaaa0.231
aaaa0.3011
bbbb0.1001
bbbb0.231
bbbb0.3011
......
请问如何改写这个游标,查出来的数据能够变成:
aaaa0.1001
bbbb0.231
cccc0.3011在线等,立刻给分。
楼主可以尝试用merge into Oracle merge into 的用法详解实例作用:merge into 解决用B表跟新A表数据,如果A表中没有,则把B表的数据插入A表;语法:MERGE INTO [your table-name] [rename your table here]USING ( [write your query here] )[rename your query-sql and using just like a table]ON ([conditional expression here] AND [...]...)WHEN MATHED THEN [here you can execute some update sql or something else ]WHEN NOT MATHED THEN [execute something else here ! ]-------实例-------
merge into a
using (select id,name from b ) c
on(a.id=c.id )
when matched then update set a.name=c.name
when not matched then insert (a.id,a.name) values (c.id,c.name);
作用:利用表 b 跟新表a ,条件是a.id=b.id,如果a表中没有该条件的数据就插入。
where rn1 = rn2;
现在你的m和n表没进行关联,所以出现了笛卡尔积如果没有关联字段,那就用rownum做一个关联了。
如果没有主键标识的话就只能用rownum来连接
可以参照2楼的方法
16:37:09 scott@TUNGKONG> select * from m;COL
----
aaaa
bbbb
cccc已用时间: 00: 00: 00.00
16:37:12 scott@TUNGKONG> select * from n; COL
----------
.1001
.231
.30111已用时间: 00: 00: 00.00
16:37:14 scott@TUNGKONG> select m.col,n.col from (select rownum rn1,col from m) m,(select rownum rn2,col from n) n
16:37:17 2 where rn1 = rn2;COL COL
---- ----------
aaaa .1001
bbbb .231
cccc .30111已用时间: 00: 00: 00.00
楼主的这个题目让人很容易想到用MERGE INTO哦 不过好像其实不是这个样子的就用2楼的方法就可以了
楼主把表名和字段名换成你自己的
如果想把两个字段连接起来作为一个字段的话用个字符串连接就可以了