有A、B、C、D四个表,B、C、D表中的记录都是A表中记录的属性。现在要建立一个视图,以实现分别查询出四个表中的需要的字段我现在的方法是
建立视图AB       A left jion B
建立视图ABC     AB left join C
建立视图ABCD   ABC left join C现在就从视图ABCD中查询但有个问题,就是B、C、D表中都有多条记录与A表中的记录关联,这样,在视图ABCD中A表中的记录就有了多条记录。
比如:
B中与A相关的有2条,则视图AB中就有2条A的重复记录,这不影响查询
但如果C中也有与A相关的记录2条,则试图ABC中就会有4条A的重复记录,有2条B的重复记录
如果D表中也有与A相关的记录2条,则试图ABCD中就会有8条A的重复记录,有4条B的重复记录,有2条C的重复记录这样就影响查询了。如果使用distinct,又只会保留一条有关A的记录,B、C、D表中的于A有关的其它多条记录就查询不出来
大家是怎么解决这个问题的?

解决方案 »

  1.   

    关键看你想如何显示?比如table Aid  col
    1  A1
    2  A2
    3  A3table B
    bid, aid, colB
    1     1     B1
    2     1     B2
    3     3     B3此时 select * from a left join b on a.id=b.aid 肯定会出现A的重复。 关键是你期望的显示结果是什么?
      

  2.   

    表和视图是这样的,但这样建的视图,视图ABCD会有非常多的重复记录
    A表:     B表        C表         D表
    id            id           id           id
                  aid          aid         aid
    name     study       work       littercreate view AB as select A.*,B.study from A left join B where A.id=B.aid;
    create view ABC as select AB.*,C.work from AB left join C where AB.id=C.aid;
    create view ABCD as select ABC.*,D.work from ABC left join D where ABC.id=D.aid;
      

  3.   

    A表:
    id          name
    1           chen
    2           wangB表:
    id         aid           study
    1          1              高中
    2          1              大专
    3          2              初中
    4          2              本科视图AB:
    id         name         study
    1          chen          高中
    1          chen          大专
    2          wang          初中
    2          wang          本科表C:
    id          aid            work
    1           1              分公司
    2           1              总公司
    3           2              分公司
    4           2              总公司视图ABC:
    id         name         study       work
    1          chen          高中        分公司
    1          chen          高中        总公司
    1          chen          大专       分公司
    1          chen          大专        总公司
    2          wang          初中       分公司
    2          wang          初中       总公司
    2          wang          本科       分公司
    2          wang          本科       总公司表D:
    id          aid            litter
    1           1              助工
    2           1              工程师
    3           2              技术员
    4           2              助工视图ABCD:
    id         name         study       work           litter
    1          chen          高中        分公司       助工
    1          chen          高中        分公司       工程师
    1          chen          高中        总公司       助工
    1          chen          高中        总公司       工程师
    1          chen          大专       分公司        助工
    1          chen          大专       分公司        工程师
    1          chen          大专        总公司       助工
    1          chen          大专        总公司       工程师
    2          wang          初中       分公司        助工
    2          wang          初中       分公司        工程师
    2          wang          初中       总公司        助工
    2          wang          初中       总公司        工程师
    2          wang          本科       分公司        助工
    2          wang          本科       分公司        工程师
    2          wang          本科       总公司        助工
    2          wang          本科       总公司        工程师
      

  4.   


    1      chen      高中    分公司     助工
    1      chen      高中    分公司     工程师
    1      chen      高中    总公司     助工
    1      chen      高中    总公司     工程师那针对这些记录,你期望的结果是什么呢?
      

  5.   

    问题的关键是  1      chen      高中    分公司     助工
     1      chen      高中    分公司     工程师
     1      chen      高中    总公司     助工
     1      chen      高中    总公司     工程师chen 到底是什么? 是 '助工' 还是 '工程师' ?
      

  6.   

    chen是姓名,高中和大专是他的学历的记录,分公司和总公司是他的工作记录,助工和工程师是他的职称记录
      

  7.   

    基于以下记录。
     1      chen      高中    分公司     助工
     1      chen      高中    分公司     工程师
     1      chen      高中    总公司     助工
     1      chen      高中    总公司     工程师你期望的结果是什么? 正确结果你手工是怎么统计出来的?
    问题说明越详细,回答也会越准确!参见如何提问。(提问的智慧