我有3张表第一张有一条单位叫密云公司的,第二张表没有密云公司,第三张表有密云公司,
这三张表用单位做全连接,连接顺序时1连接2连接3,结果时出现两个密云公司。
有一个解决方法就是1和2 连接再把1和2连接的结果在与3连接,这样就行了。但是很麻烦,请问大牛们还有其他方法吗?

解决方案 »

  1.   

    假如:A,C表有密云公司记录,B表没有密云公司记录,那么select 
      from tab_a A,tab_b B,tab_c C
     where A.id = B.id(+)
       and A.id = C.id(+)出现2个密云公司应该不关全连接的事吧,而是连接条件不够严谨?
      

  2.   

    select  distinct A.*
      from tab_a A,tab_b B,tab_c C
     where A.id = B.id(+)
      and A.id = C.id(+)
      

  3.   

    我只是说的这一种情况!也许A没有,b有,c有啊。A,B、C数据不一定啊,也许不是3张表全连接或很多
      

  4.   

    select ... FROM XL
      FULL OUTER JOIN BYQ
        ON BYQ.DYDJ = XL.DYDJ
      FULL OUTER JOIN DL
        ON DL.DYDJ = BYQ.DYDJ
      FULL OUTER JOIN GL
        ON GL.DYDJ = DL.DYDJ
    先这样的查询,这4张表就有两个字段电压等级和数量
      

  5.   

    关系型数据库的表之间是有主从关系的,建议楼主明确自己的需求,然后使用主表对其它表进行外连接,这样业务逻辑比较清楚。-- 假设XL是主表
    select ... FROM XL
      FULL OUTER JOIN BYQ
      ON BYQ.DYDJ = XL.DYDJ
      FULL OUTER JOIN DL
      ON DL.DYDJ = XL.DYDJ
      FULL OUTER JOIN GL
      ON GL.DYDJ = XL.DYDJ
      

  6.   

    那就加一个distinct吧。 只要结果正确的话。
      

  7.   

    我还是详细说一下吧。我是做电力公司运营系统的
    我想按单位统计
           线路,变压器,断路器,隔离开关这四个的
                    运行数、按工作内容分的清扫等等
              个数
    比如:
                |       线路      |
        单位    |  清扫   运行数  |顺义供电公司|    3  |    5    |
    线路,变压器,断路器,隔离开关这四个查询的单位不全,不知道那个多那个少!
    其实也是数据不全所造成的,他们几个应能查处所有单位。
    但是就这情况怎么解决啊!
    这线路,变压器,断路器,隔离开关是视图,以前不是的时候很慢。
    这几个视图的字段就是单位和运行数,清扫数啊等等
    遇到的情况是:假如线路有平谷供电公司单位,而变压器没有,短路器又有,这只是一种情况,
       关联顺序就是线路,变压器,断路器,结果出现两个平谷供电公司单位。
    我知道的解决办法是先用线路,变压器全连接,把他们的结果在和断路器全连接这样就好了 。
    但是这样对3个表的全连接的代码量可以接受,如果是4,5张怎么办?
                                                            有没有其他方法。
    8楼的distinct不行,数据不知道那个重复的是对的。
      

  8.   


    看了楼主的描述,觉得楼主需要有这么一张表,单位字典表。不知道楼主数据库中有没有这张表?如果没有就只能为这个表建立一个视图,使用线路、变压器、断路器、隔离开关4个表中单位的合集做为该视图的数据。
    然后就可以使用单位表做为主表,线路、变压器等表做为从表,查询SQL如下:select ... FROM 单位表
      FULL OUTER JOIN XL
      ON XL.DYDJ = 单位表.DYDJ
      FULL OUTER JOIN BYQ
      ON BYQ.DYDJ = 单位表.DYDJ
      FULL OUTER JOIN DL
      ON DL.DYDJ = 单位表.DYDJ
      FULL OUTER JOIN GL
      ON GL.DYDJ = 单位表.DYDJ