网站首页  |   业界社区  |  电信社区  |  技术社区   |  极客社区  |  游戏社区  |  生活社区   |   科技博客  |   同事录
TechWeb-技术社区


标题: [转贴] 【access】跨表查询?查询两个表
麻雀杀手
TW高级会员
Rank: 4


UID 117324
精华 10
积分 602
帖子 306
阅读权限 50
注册 2007-4-1
状态 离线
发表于 2007-11-13 10:34 资料 短消息 加为好友
【access】跨表查询?查询两个表

数据库中有两个表:进货表和销售表
+S7{%@)T5p(P!r5c4KTechWeb-技术社区程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛/v)S-Y&F+Q6|"m(A.d;`
进货表: ;e,M#}'x9c'b
产品名称   进货量
,F"l'^ }(p6r,PTechWeb-技术社区产品1         10 :T(_*v-~1D'p(k9U
产品2         20
1c*i6f-X(P7k'[%x!B.R$y S7U'Y%M2~
销售表: tech.techweb.com.cn,Q)M-A3p.A4@3z$I5A3d
产品名称     销售量
9U `(P4k'w$C+u程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛产品1         5
'e6a4c,g1L0W-w*QTechWeb-技术社区产品2         5
4S&t%S,l0b:w!b,C/K程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛/c.X9o/k+o
请问如何写SQL可以如下方式显示:
'y b7l/f#S.R*H;w"f'g(T程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛TechWeb-技术社区-E;v!R.P:X0W!b'_$V0@
产品名称   进货量   销售量   库存量 "n%_;J;Z)Q R8L1L
产品1           10         5           5
9L;j2G9P:v!h1A程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛产品2           20         5           15
'@(C$z5~4dTechWeb-技术社区
*?%d#\+p+e!|!j7w9H多谢!!

引用 回复 顶部
游客
未注册









发表于 2007-11-16 21:35
另,请考虑到这种情况:
进货表中的一些产品可能不包含在销售表中,因为销售量为0

即:
进货表:   
产品名称       进货量   
产品1                   10   
产品2                   20   
产品3                   10   

销售表:   
产品名称           销售量   
产品1                   5   
产品2                   5

引用 回复 顶部
游客
未注册









发表于 2007-11-16 21:35
SELECT   进货表.产品名称,   进货表.进货量,   销售表.销售量,   [进货量]-[销售量]   AS   库存量
FROM   销售表   INNER   JOIN   进货表   ON   销售表.产品名称   =   进货表.产品名称

引用 回复 顶部
游客
未注册









发表于 2007-11-16 21:35
谢谢楼上的回复

不过可能是我忘记说明了,每一种产品都可能会多次出现在进货表和销售表中
如下:
进货表:      
产品名称               进货量      
产品1                                       10      
产品2                                       20      
产品3                                       10
产品1                                       30      
产品2                                       50      

销售表:      
产品名称                       销售量      
产品1                                       5      
产品2                                       5     
产品2                                       15      
产品1                                       25   

如上所示,这个SQL应该如何写呢?

引用 回复 顶部
游客
未注册









发表于 2007-11-16 21:35
请问如何写SQL可以如下方式显示:   

产品名称       总进货量       总销售量       库存量   
产品1                       40             30               10   
产品2                     100             20                 80   

多谢!!

引用 回复 顶部
游客
未注册









发表于 2007-11-16 21:35
如果是在MS   SQL   Server   2000中可以这样
SQL codecreate table tin(pid varchar(5),ins int)
create table tout(pid varchar(5),outs int)               
                                             
insert into tin values('产品1',10)
insert into tin values('产品2',20)
insert into tin values('产品3',10)
insert into tin values('产品1',30)
insert into tin values('产品2',50)

insert into tout values('产品1',5)      
insert into tout values('产品2',5)     
insert into tout values('产品2',15)      
insert into tout values('产品1',25)

select * from tin
select * from tout

select tti.pid as 产品名称,
    tti.allins as 总进货量,
    tto.allouts as 总销售量,
    tti.allins-tto.allouts as 库存量
from
(select pid,sum(outs) as allouts from tout group by pid) as tto full join
(select pid,sum(ins) as allins from tin group by pid) as tti on tti.pid=tto.pid

drop table tin
drop table tout

引用 回复 顶部
游客
未注册









发表于 2007-11-16 21:35
结果为:
产品1 40 30 10
产品2 70 20 50
产品3 10 NULL NULL
楼主提供的答案是有问题的。

引用 回复 顶部
游客
未注册









发表于 2007-11-16 21:36
select   产品名称,sum(iif(sj> 0,sj,0))   as   总进货量,
sum(iif(sj <0,sj*-1,0))   as   总销售量,
sum(sj)   as   库存量   from   (
select   产品名称,进货量   as   sj   from   进货表
union   all
select   产品名称,销售量*-1   as   sj   from   销售表)
group   by   产品名称

引用 回复 顶部
游客
未注册









发表于 2007-11-16 21:36
JET   SQL不支持FULL   JOIN,用LEFT   JOIN+RIGHT   JOIN解决,方法复杂一些,上述方法(用UNION   ALL)最简单

引用 回复 顶部
游客
未注册









发表于 2007-11-16 21:36
insert   into   tin   values( '产品1 ',10)
insert   into   tin   values( '产品2 ',20)
insert   into   tin   values( '产品3 ',10)
似乎不好吧   实际上表中的产品非常多啊   不可能这样产生一个表啊

先   揭帖再试验结果   呵呵

引用 回复 顶部
查看积分策略说明快速回复主题
选项 标题 Smilies
禁用 URL 识别
禁用 Smilies
禁用 Discuz!代码
使用匿名发帖
使用个人签名
接收新回复邮件通知
内容





当前时区 GMT+8, 现在时间是 2008-10-8 04:10
京ICP证060517号

本论坛支付平台由支付宝提供
携手打造安全诚信的交易社区 Powered by Discuz! 5.5.0 © 2001-2008 Comsenz Inc.
Processed in 0.048443 second(s), 7 queries

清除 Cookies - 联系我们 - TechWeb.com.cn - Archiver - WAP