有两张表,表A和表B,
表A:id,code,name
表B: id,code,name创建了一张视图,V_A,
select *  from  A
union all
select *   from  B为了控制ID,没有重复的,我需要对表A和表B做如何控制? 请高手讲解详细点,谢谢!

解决方案 »

  1.   

    select * from A
    union all
    select * from B where not exisits
    (select 1 from a where b.id= a.id)
      

  2.   

    select * from A where not exisits
    (select 1 from b where a.id= b.id)union all
    select * from B 
      

  3.   

    很简单啊,在建立表A和表B的时候设置ID都为主键。
    这样无论A表还是B表中都不会有重复的记录。然后创建视图的时候,使用UNION,不带ALL,A和B中重复的记录,只取一条到视图中。
      

  4.   

    实测数据:CREATE TABLE T72
    (
        ID NUMBER(4) PRIMARY KEY,
        NAME VARCHAR2(20)
    );
    INSERT INTO T72 VALUES(1, 'A');
    INSERT INTO T72 VALUES(2, 'B');
    INSERT INTO T72 VALUES(3, 'C');
    CREATE TABLE T73
    (
        ID NUMBER(4) PRIMARY KEY,
        NAME VARCHAR2(20)
    );
    INSERT INTO T73 VALUES(1, 'A');
    INSERT INTO T73 VALUES(2, 'B');
    INSERT INTO T73 VALUES(4, 'D');
    INSERT INTO T73 VALUES(5, 'E');
    实测结果:
      

  5.   

    上面的有2个问题1、UNION 的效率很低很低;2、UNION 是对所有字段进行判断重复,如果仅仅ID字段相同,其它字段不一样,是不认为是重复的数据的;
      

  6.   

    select id,code,name from(
    select id,code,name,row_number() over(partition by id order by id) rn from V_A ) where rn=1
      

  7.   

    看需求,看你对A和B中重复的ID要怎么处理
      

  8.   

    你ID重复后是用A表中的ID那条数据还是B表?
      

  9.   


    select * from A
    union all
    select * from B where not exisits
    (select 1 from a where b.id= a.id)