两个表的行数相同,合并两个表中的列,组成一个新表,如何保证没有重复的数据?
例如
我建立了一个游标
        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在线等,立刻给分。

解决方案 »

  1.   


    楼主可以尝试用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表中没有该条件的数据就插入。
      

  2.   

    select m.col,n.col from (select rownum rn1,col from m),(select rownum rn2,col from n)
    where rn1 = rn2;
      

  3.   

    不太明白:(    实际原来是这样的,我传进包里有两个字符串,一个是名称字符串,一个是数值字符串,这两个字符串都用'|'隔开的。 名称与值是一一对应的。 我在包头加了一个Cursor,目的是将这两个字符串都按照'|'拆分,我就想得到的两个表正好是我需要的两个部分,如果我可以把他们和在一起,组合成一个表,这样我用循环操作,操作比较方便。
      

  4.   


    现在你的m和n表没进行关联,所以出现了笛卡尔积如果没有关联字段,那就用rownum做一个关联了。
      

  5.   

    没有连接条件导致的笛卡尔积
    如果没有主键标识的话就只能用rownum来连接
    可以参照2楼的方法
      

  6.   

    简单的例子,供参考。
    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
      

  7.   

    呵呵 
    楼主的这个题目让人很容易想到用MERGE INTO哦 不过好像其实不是这个样子的就用2楼的方法就可以了
    楼主把表名和字段名换成你自己的
    如果想把两个字段连接起来作为一个字段的话用个字符串连接就可以了