现有两个表A,B(A,B表的字段有部分相同)
想改成一个表C后,
请问怎样写A,B视图使的连接A,B表的程序不用修改
就能实现当A表程序连接A视图或B表程序连接b视图时都能改变C表?谢谢!

解决方案 »

  1.   

    --在A、B表上直接建立个视图即可:
    create view as select t1.f1,t1.f2,t2.f1,t2.f2 from (select field1 f1,field2 f2,...,from tableA) t1,(select field1 f1,field2 f2,...,from tableA) t2 where ...;
      

  2.   


     --在A、B表上直接建立个V_C视图即可:
    create view V_C as 
           select t1.f1,t1.f2,t2.f1,t2.f2 
           from (select field1 f1,field2 f2,...,from tableA) t1,
                (select field1 f1,field2 f2,...,from tableA) t2 
           where ...;
      

  3.   


    create view V_C as 
           select t1.f1,t1.f2,t2.f1,t2.f2,... 
           from (select field1 f1,field2 f2,...,from tableA) t1,
                (select field1 f1,field2 f2,...,from tableB) t2 
           where ...;
      

  4.   

    from (select field1 f1,field2 f2,...,from tableA) t1,
                (select field1 f1,field2 f2,...,from tableB) t2 创建A或B表视图时,要写2表吗?
      

  5.   

    CREATE TABLE C(PRI_KEY INT, FLDA INT, FLDB INT, FLDC INT);
    INSERT INTO C VALUES(1,2,3,4);
    INSERT INTO C VALUES(11,21,31,41);
    INSERT INTO C VALUES(12,22,32,42);
    CREATE VIEW A AS SELECT PRI_KEY AS KEY, FLDA, FLDC FROM C;
    CREATE VIEW B AS SELECT PRI_KEY AS KEY, FLDB, FLDC FROM C;
    UPDATE A SET FLDA = FLDA * 10, FLDC = FLDC * 20 WHERE KEY = 1;
    UPDATE B SET FLDB = FLDB * 5, FLDC = FLDC * 25 WHERE KEY = 11;
      

  6.   

    能解释下吗?兄弟?我没看懂UPDATE A SET FLDA = FLDA * 10, FLDC = FLDC * 20 WHERE KEY = 1; 
    UPDATE B SET FLDB = FLDB * 5, FLDC = FLDC *…
      

  7.   

    改成C表之后,就在C表建立两个视图分别跟以前的A,B一样不就可以了。。
      

  8.   

    本人的意思是不要分别在A、B表上建视图,直接建立个V_C视图(数据来自于A、B表)即可。
      

  9.   

    谢谢!你的思路很好,但是我不能用,
    因为我想建个视图A,B并且视图与表A,B的名字相同,即为C表建名字为A,B的视图,目的是不用改程序(A的程序连接A视图,B的程序连接B视图)就能改变C表!
      

  10.   

    一般的视图是不能修改表的。因LZ对此说明仍较抽象,是不是可以考虑用Procedure或Trigger?
      

  11.   

    我刚一开始考虑trigger了,可是在避免触发器的相互触发中找不到好方法!
    我的意识是:表a有1,2,3,4,5字段
    表b有1,6,7,8,9字段合并成一个表c 字段为1,2,3,4,5,6,7,8,9
    然后基于这个表建视图a select 1,2,3,4,5 from c
    视图b:select 1,6,7,8,9 from c
    这样就不用改原来连接a,b表的程序了!
    我这个想法行吗?
      

  12.   

    可以啊。你在实现你这个想法的时候遇到什么问题呢?
    是不是A,B表的数据随时更新,然后不能及时同步到C表中?
      

  13.   

    你想建C表,其中数据来源于A,B表,而且数据不断更新。那就只有用MV了。但是看你这个需求,为什么
    1.不直接建两个视图关联A,B表,而要通过建立一个C表去关联呢?
    2.C可以建成视图,不用建表。这样就不存在同步问题了?