本帖最后由 a410787073 于 2013-01-29 17:27:03 编辑

解决方案 »

  1.   

    a,b你已经关联上了啊,你是不是想说b,c没办法关联了?
    如果是这样,再加一句就行。select a.*,b.*,c.* from #a a     
    full join #b b on a.PlateNumber=b.PlateNumber and a.PeccancyTime=b.PeccancyTime     full join #c c on a.PlateNumber=c.PlateNumber and    a.PeccancyTime=c.PeccancyTime  
    and b.PlateNumber=c.PlateNumber and b.PeccancyTime=c.PeccancyTime  
      

  2.   

    你这个逻辑好矛盾啊,你最终想取得谁的数据?
    按照你这个关联法,c表要同时查询到ab两表的字段的话,必然要ab两表是inner join的关系
    如果是full join,c表也不能同时匹配a表有b表没有,且b表有a表没有的数据啊
      

  3.   

    我也有类似楼主的问题,举个简化的例子:
    有三个表:入库表、领料表、退料表。
    每个表都有四个字段,ID(自增长的),日期,料号,数量。
    需要的结果是一个月中的入出记录:料号、入库数量、领料数量、退料数量。
    因为某个料可能这个月只有入库,或是只有领料,或是只有退料。所以需要将三个表进行full连接。
    假设每个表每天只有一条记录的情况下,下面的SQL语句:
    select * from 入库表 a
    full join 领料表 b on a.日期=b.日期 and a.料号=b.料号
    full join 退料表 c on a.日期=c.日期 and a.料号=c.料号
    当有一天,入库表没有记录,而领料表与退料表都有记录,则会变成两条记录。
      

  4.   


    select a.*,b.*,c.*
    from #a a 
    full outer join #b b on a.PlateNumber=b.PlateNumber and a.PeccancyTime=b.PeccancyTime
    full outer join #c c on (a.PlateNumber=c.PlateNumber and a.PeccancyTime=c.PeccancyTime)
                    or (c.PlateNumber=b.PlateNumber and c.PeccancyTime=b.PeccancyTime)
    今天突发奇想  这么写。试了几种情况。还可以。下午继续测试。如果没问题 就结贴了
      

  5.   

    SELECT aa.*,cc.* FROM 
    (SELECT COALESCE(a.PlateNumber,b.PlateNumber) PlateNumber,COALESCE(a.PeccancyTime,b.PeccancyTime) PeccancyTime,... FROM #a a
    FULL JOIN #b b ON a.PlateNumber=b.PlateNumber AND a.PeccancyTime=b.PeccancyTime) aa
    FULL JOIN #c cc 
    ON aa.PlateNumber=cc.PlateNumber AND aa.PeccancyTime=cc.PeccancyTime
      

  6.   

    这样就可以了select a.*,b.*,c.*
    from #a a
        full join #b b on a.PlateNumber=b.PlateNumber and a.PeccancyTime=b.PeccancyTime
        full join #c c on isnull(a.PlateNumber,b.PlateNumber)=c.PlateNumber and    isnull(a.PeccancyTime,b.PeccancyTime)=c.PeccancyTime
      

  7.   

    上面几位高手的方法应该可行。
    但之前写过一个很麻烦的,不是三个表,而是六七个表进行full join连接!
    后来没办法,就是先将这六七个表union all,再left join 这六七个表。
      

  8.   


    一般都是这么写的 ,先union all,然后用union all的结果再,关联这6-7个表,这样比较有扩展性。如果还是用full join的话,很容易写错的
      

  9.   

    如果是这种情况,那么你需要使用union all, 数量根据情况取正负值。
      

  10.   

    目前为止,我还没有碰到必须要使用full join的地方,full join 等于两个表分别前后left join后union,如果碰到必须要使用full join的,那么你就要考虑一下表格结构,运算过程是否合理。
    full join目前我只使用来生成大量测试数据。另外,
    full join 和 full outer join
    left join 和 left outer join 
    都是完全相同的
      

  11.   

    回楼上的,我们之前写的报表,大致包括下面几列:
    年月、料号、期初数量、入库数量、领料数量、退料数量、退货数量、调入数量、调出数量、期末数量
    所以,开始时是用的full join,后来发现内容不对,就改成先union,再left join了。
      

  12.   

    select * from 入库表 a
    full join (领料表 b 
    full join 退料表 c on a.日期=c.日期 and a.料号=c.料号
    )on a.日期=b.日期 and a.料号=b.料号