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
这样的话 a表 与b 表 就没法关联了。
求教 怎么改改 可以使 a b c 都关联上
sqlfull?join
------解决方案-------------------- 你这个逻辑好矛盾啊,你最终想取得谁的数据?
按照你这个关联法,c表要同时查询到ab两表的字段的话,必然要ab两表是inner join的关系
如果是full join,c表也不能同时匹配a表有b表没有,且b表有a表没有的数据啊 ------解决方案-------------------- 我也有类似楼主的问题,举个简化的例子:
有三个表:入库表、领料表、退料表。
每个表都有四个字段,ID(自增长的),日期,料号,数量。
需要的结果是一个月中的入出记录:料号、入库数量、领料数量、退料数量。
因为某个料可能这个月只有入库,或是只有领料,或是只有退料。所以需要将三个表进行full连接。
假设每个表每天只有一条记录的情况下,下面的SQL语句:
select * from 入库表 a
full join 领料表 b on a.日期=b.日期 and a.料号=b.料号
full join 退料表 c on a.日期=c.日期 and a.料号=c.料号
当有一天,入库表没有记录,而领料表与退料表都有记录,则会变成两条记录。 ------解决方案--------------------
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
------解决方案--------------------
这样就可以了
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 ------解决方案--------------------