关于full join 3个表关联问题。

a410787073 2013-01-29 05:26:27

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 都关联上
...全文
2009 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
我腫了 2013-02-01
  • 打赏
  • 举报
回复
select * from 入库表 a
full join (领料表 b 
full join 退料表 c on a.日期=c.日期 and a.料号=c.料号
)on a.日期=b.日期 and a.料号=b.料号
zbdzjx 2013-02-01
  • 打赏
  • 举报
回复
回楼上的,我们之前写的报表,大致包括下面几列: 年月、料号、期初数量、入库数量、领料数量、退料数量、退货数量、调入数量、调出数量、期末数量 所以,开始时是用的full join,后来发现内容不对,就改成先union,再left join了。
shoppo0505 2013-01-31
  • 打赏
  • 举报
回复
引用 5 楼 a410787073 的回复:
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 an……
目前为止,我还没有碰到必须要使用full join的地方,full join 等于两个表分别前后left join后union,如果碰到必须要使用full join的,那么你就要考虑一下表格结构,运算过程是否合理。 full join目前我只使用来生成大量测试数据。 另外, full join 和 full outer join left join 和 left outer join 都是完全相同的
shoppo0505 2013-01-31
  • 打赏
  • 举报
回复
引用 3 楼 zbdzjx 的回复:
我也有类似楼主的问题,举个简化的例子: 有三个表:入库表、领料表、退料表。 每个表都有四个字段,ID(自增长的),日期,料号,数量。 需要的结果是一个月中的入出记录:料号、入库数量、领料数量、退料数量。 因为某个料可能这个月只有入库,或是只有领料,或是只有退料。所以需要将三个表进行full连接。 假设每个表每天只有一条记录的情况下,下面的SQL语句: select * from 入库表……
如果是这种情况,那么你需要使用union all, 数量根据情况取正负值。
LongRui888 2013-01-31
  • 打赏
  • 举报
回复
引用 8 楼 zbdzjx 的回复:
上面几位高手的方法应该可行。 但之前写过一个很麻烦的,不是三个表,而是六七个表进行full join连接! 后来没办法,就是先将这六七个表union all,再left join 这六七个表。
一般都是这么写的 ,先union all,然后用union all的结果再,关联这6-7个表,这样比较有扩展性。如果还是用full join的话,很容易写错的
a410787073 2013-01-30
  • 打赏
  • 举报
回复

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)
今天突发奇想 这么写。试了几种情况。还可以。下午继续测试。如果没问题 就结贴了
a410787073 2013-01-30
  • 打赏
  • 举报
回复
来了。~~ 和楼上的道理一样。怎么解决呢
zbdzjx 2013-01-30
  • 打赏
  • 举报
回复
我也有类似楼主的问题,举个简化的例子: 有三个表:入库表、领料表、退料表。 每个表都有四个字段,ID(自增长的),日期,料号,数量。 需要的结果是一个月中的入出记录:料号、入库数量、领料数量、退料数量。 因为某个料可能这个月只有入库,或是只有领料,或是只有退料。所以需要将三个表进行full连接。 假设每个表每天只有一条记录的情况下,下面的SQL语句: select * from 入库表 a full join 领料表 b on a.日期=b.日期 and a.料号=b.料号 full join 退料表 c on a.日期=c.日期 and a.料号=c.料号 当有一天,入库表没有记录,而领料表与退料表都有记录,则会变成两条记录。
zbdzjx 2013-01-30
  • 打赏
  • 举报
回复
上面几位高手的方法应该可行。 但之前写过一个很麻烦的,不是三个表,而是六七个表进行full join连接! 后来没办法,就是先将这六七个表union all,再left join 这六七个表。
Vidor 2013-01-30
  • 打赏
  • 举报
回复
引用 5 楼 a410787073 的回复:
SQL code?12345select a.*,b.*,c.*from #a a full outer join #b b on a.PlateNumber=b.PlateNumber and a.PeccancyTime=b.PeccancyTimefull outer join #c c on (a.PlateNumber=c.PlateNumber and a.P……
这样就可以了 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
chuifengde 2013-01-30
  • 打赏
  • 举报
回复
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
szm341 2013-01-29
  • 打赏
  • 举报
回复
你这个逻辑好矛盾啊,你最终想取得谁的数据? 按照你这个关联法,c表要同时查询到ab两表的字段的话,必然要ab两表是inner join的关系 如果是full join,c表也不能同时匹配a表有b表没有,且b表有a表没有的数据啊
shoppo0505 2013-01-29
  • 打赏
  • 举报
回复
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

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧