表table1:只有一个字段A,数据是1、2、3、4。
表table2:也是一个字段A,数据是1、2、5、6。
能否一条语句就出来唯一数据的结果,也就是1、2、3、4、5、6。

解决方案 »

  1.   

    select a from table1
    union 
    select a from table2;
      

  2.   

    select a from table1
      union
    select a from table2
      

  3.   

    实际上数据还有复杂的多,我本就用union的,但发现还是有重复数据,我再试试看。
      

  4.   

    select distinct a from table1
      union
    select distinct a from table2
      

  5.   

    select a from table1
      union
    select a from table2
      

  6.   

    select a from table1
      union
    select a from table2
    不行的话 外面在套一层循环,distinct一下
      

  7.   

    注意 集合操作中union和union all的区别
    SQL> show user
    USER 为 "SCOTT"SQL> ed
    已写入 file afiedt.buf  1  CREATE TABLE table1(
      2      a      NUMBER
      3* )
    SQL> /表已创建。SQL> ed
    已写入 file afiedt.buf  1  CREATE TABLE table2(
      2      a      NUMBER
      3* )
    SQL> /表已创建。SQL> ed
    已写入 file afiedt.buf  1* INSERT      INTO table1 VALUES(1)
    SQL> /已创建 1 行。SQL> ed
    已写入 file afiedt.buf  1* INSERT      INTO table1 VALUES(2)
    SQL> /已创建 1 行。SQL> ed
    已写入 file afiedt.buf  1* INSERT      INTO table1 VALUES(3)
    SQL> /已创建 1 行。SQL> ed
    已写入 file afiedt.buf  1* INSERT      INTO table1 VALUES(4)
    SQL> /已创建 1 行。SQL> ed
    已写入 file afiedt.buf  1* INSERT      INTO table2 VALUES(1)
    SQL> /已创建 1 行。SQL> ed
    已写入 file afiedt.buf  1* INSERT      INTO table2 VALUES(2)
    SQL> /已创建 1 行。SQL> ed
    已写入 file afiedt.buf  1* INSERT      INTO table2 VALUES(5)
    SQL> /已创建 1 行。SQL> ed
    已写入 file afiedt.buf  1* INSERT      INTO table2 VALUES(6)
    SQL> /已创建 1 行。SQL> select * from table1;         A
    ----------
             1
             2
             3
             4SQL> select * from table2;         A
    ----------
             1
             2
             5
             6SQL> ed
    已写入 file afiedt.buf  1  select * from table1
      2  union
      3* SELECT * FROM table2
    SQL> /         A
    ----------
             1
             2
             3
             4
             5
             6已选择6行。SQL> ed
    已写入 file afiedt.buf  1  select * from table1
      2  union ALL
      3* SELECT * FROM table2
    SQL> /         A
    ----------
             1
             2
             3
             4
             1
             2
             5
             6已选择8行。SQL>
      

  8.   

    union 不带all 可以去除重复的记录。
      

  9.   

    兄弟,把这段sql执行一下,看一下是否满足您的需求:
    with t1 as
     (
      
      select 1
        from dual
      
      union
      
      select 2
        from dual
      
      union
      
      select 3
        from dual
      
      union
      
      select 4 from dual
      
      ),
    t2 as
     (
      
      select 1 
        from dual
      
      union
      
      select 2
        from dual
      
      union
      
      select 5
        from dual
      
      union
      
      select 6 from dual
      
      )
    select * from t1
    union
    select * from t2
      

  10.   

    with t1 as
     (
       
      select 1
      from dual
       
      union
       
      select 2
      from dual
       
      union
       
      select 3
      from dual
       
      union
       
      select 4 from dual
       
      ),
    t2 as
     (
       
      select 1  
      from dual
       
      union
       
      select 2
      from dual
       
      union
       
      select 5
      from dual
       
      union
       
      select 6 from dual
       
      )
    select * from t1
    union
    select * from t2
      

  11.   

    union 可以去掉重复记录union all 包括重复记录所以结果集中没有必要加 distinct 来过滤重复,不然影响效率
      

  12.   

    可以的,借助user_objects视图可以一句写出来--建立测试环境
    create table tmp_001
    (
     cola varchar(20)
    );
    --插入测试数据
    insert into tmp_001
    select '1、2、3、4' from dual
    union all
    select '1、2、5、6' from dual;
    commit;
    --执行合并语句
    select reverse(ltrim(max(SYS_CONNECT_BY_PATH(cola,',')),',')) 合并后的字符串 from
     (
       select row_number() over(order by cola) id,cola from (
            select distinct substr(a.cola,b.id, instr(a.cola||'、','、',b.id,1)-b.id) cola
              from tmp_001 a,(select rownum id from user_objects) b
                WHERE b.ID<=length(a.cola)
                    AND substr('、'||a.cola,b.ID,1)='、') a
       ) a CONNECT BY id = PRIOR id - 1合并后的字符串                                                                         
    --------------------------------------------------------------------------------
    1,2,3,4,5,6                                                                     
    1 row selected.
      

  13.   

    with t1 as
     (
       
      select 1
      from dual
       
      union
       
      select 2
      from dual
       
      union
       
      select 3
      from dual
       
      union
       
      select 4 from dual
       
      ),
    t2 as
     (
       
      select 1  
      from dual
       
      union
       
      select 2
      from dual
       
      union
       
      select 5
      from dual
       
      union
       
      select 6 from dual
       
      )
    select * from t1
    union
    select * from t2
      

  14.   

    非常感谢大家,结果发现在语句里写了union all了,粘贴的时候没注意。