导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

来抢分吧,关于Sql语句中的Join问题

yuyu2002 2003-12-25 10:45:28
在前台操作中得到三个表:
领入表:
领入时间 配件编号 领入数量
2003-5-7 3 100
4 400
2003-5-9 3 47
6 2345
部门领出表:
部门领出时间 配件编号 部门领出数量
2003-10-9 3 10
6 400
2003-11-7 4 6
个人领出表:
个人领出时间 配件编号 个人领出数量
2003-9-9 3 7
6 7
2003-9-27 3 2

现我在后台查看时得到:“关于配件编号的领入领出情况”,希望得到的界面如下

配件编号 领入时间 数量 部门领出时间 数量 个人领出时间 数量
--------- -------- ---- ------------ ---- ----------- ----
(1) 3 2003-5-7 100 2003-10-9 10 2003-9-7 7
(2) 2003-5-9 47 2003-9-27 2

我若用join连接三个表,则(2)条记录无
若用了left join连接三个表,则会变成4条记录(1对多)
请教各位大侠:1 若用join显示如何写语句
2 若join不行,可否还有其它方法,比如直接建个库表?
Mshflexgrid可以显示层次结构,不知这里好用么??

...全文
26 点赞 收藏 26
写回复
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
erigido 2003-12-26
抢不到,就只有学习了
回复
orthodox 2003-12-26
学习 ing
回复
sunrisehy2003 2003-12-26
非常謝謝你--wanghong9631217(bear)
回复
yuyu2002 2003-12-25
我的意思是
对于“配件”而言,若个人领出表记录是5条,
当时领入表记录是2条,部门领出表记录是1条
那在总表中就显示5行(领入表、部门领出表必然空几行),
用left join会显示2*1*5=10条记录,有10行
回复
sunrisehy2003 2003-12-25
我終於懂了你的意思
select a.配件编号,a.领入时间,a.数量,b.部门领出时间,b.数量,b.个人领出时间,b.数量
from 领入表 a
left join ( select d.部门领出时间,d.数量,e.个人领出时间,e.数量
from 部门领出表 d
union 个人领出表 e
on d.配件编号=e.配件编号
) b
on a.配件编号=b.配件编号
where a.配件编号='3'
group by a.配件编号,a.领入时间,a.数量,b.部门领出时间,b.数量,b.个人领出时间,b.数量
回复
sunrisehy2003 2003-12-25
你的意思是說只要2條,那就這樣
select a.配件编号,a.领入时间,a.数量,b.部门领出时间,b.数量,c.个人领出时间,c.数量
from 领入表 a left join 部门领出表 b on a.配件编号=b.配件编号
left join 个人领出表 c on a.配件编号=c.配件编号
where a.配件编号='3'
group by a.配件编号,a.领入时间,a.数量,b.部门领出时间,b.数量,c.个人领出时间,c.数量
回复
evilks 2003-12-25
如果个人领出表里的记录大于2条,前两个表不变,你要什么样的结果?
回复
evilks 2003-12-25
黎明你的也不对。。我看不能用left join来做。那样的话不管怎样都会有4条的。
回复
donghb8 2003-12-25
可以用时间输出嘛
回复
qiaolin53 2003-12-25
select a.配件编号,a.领入时间,a.领入数量,b.部门领出时间,b.部门领出数量,c.个人领出时间,c.个人领出数量
from 领入表 a
left join 部门领出表 b on a.配件编号=b.配件编号
left join 个人领出表 c on a.配件编号 = c.配件编号
where a.配件编号 = '3'
回复
sunrisehy2003 2003-12-25
就像我上面寫的,分組就可以了
回复
yuyu2002 2003-12-25
领入时间和领出时间本来就不对应
我是希望按照“配件”查询其具体情况
回复
sunrisehy2003 2003-12-25
select a.配件编号,a.领入时间,a.数量,b.部门领出时间,b.数量,c.个人领出时间,c.数量
from 领入表 a left join 部门领出表 b on a.配件编号=b.配件编号
left join 个人领出表 c on a.配件编号=c.配件编号
group by a.配件编号,a.领入时间,a.数量,b.部门领出时间,b.数量,c.个人领出时间,c.数量
回复
victorycyz 2003-12-25
你的结果集本来就不合理。
领入时间与领出时间是依据什么原则对应的?
回复
txlicenhe 2003-12-25
select a.配件编号,a.领入时间,a.领入数量,b.部门领出时间,b.部门领出数量,c.个人领出时间,c.个人领出数量
from 领入表 a
left join 部门领出表 b on a.配件编号=b.配件编号
left join 个人领出表 c on a.配件编号 = c.配件编号
where a.配件编号 = '3'
回复
txlicenhe 2003-12-25
select a.配件编号,a.领入时间,a.领入数量,b.部门领出时间,b.部门领出数量,c.个人领出时间,c.个人领出数量
from 领入表 a
left join 部门领出表 b on a.配件编号=b.配件编号
left join 个人领出表 c on a.配件编号 = c.配件编号
where a.个人领出表 = '3'
回复
wanghong9631217 2003-12-25
其实他的思路很简单啊,就是手动的将三个表中的资料编了一个号,然后对号入座就可以了。
但是还有一个问题,对于领出的资料笔数多于领入的就会把多余的领出的资料给漏掉。所以这里用左连接欠考虑,不过就这个问题中的资料就够了,但是实际中领出的次数应该比领入的多。所以我建议你用全连接(full join)
回复
yuyu2002 2003-12-25
up
回复
sunrisehy2003 2003-12-25
monkey,你好!能介紹一下你的思路嗎?非常感謝!!!
回复
yuyu2002 2003-12-25
楼上的你自己测试一下,看到底行不行,效果我应该讲的很清楚了
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告