sql 多表联接查询(超过有五张表,但是又分多种情况,子查询语句有十几条)统计然后分组

select(selectorgnamefromorgasogwhereorg.id=og.id),(selectcount(*)fromtb1ast1whreet1.o... select (select orgname from org as og where org.id=og.id),
(select count(*) from tb1 as t1 whree t1.orgid=org.id) as number1,
(select count(*) from tb2 as t2 whree t2.orgid=org.id) as number2,
(select count(*) from tb3 as t3 whree t3.orgid=org.id) as number3,
(select count(*) from tb4 as t4 whree t4.orgid=org.id) as number4,
(select count(*) from tb5 as t5 whree t5.orgid=org.id) as number5 ,
。。。。。。。。。。。。。。。。。。。。。。。。number18
from org as org,tb as tb where org.id=tborg.id
group by org.name having count(*)>0
语句也就是这么个意思,现在是查出来了,可是有那么几行查询结果为0的也显示出来了,我不想显示全为0的这一行记录.如下:
orgname ------number1-------number2-------number3-------number4------number5
aaaa-----------0--------------2--------------0-------------1------------0
bbbb-----------1--------------0--------------0-------------0------------0
cccc-----------0--------------0--------------0-------------0------------0
dddd-----------0--------------0--------------0-------------0------------0
eeee-----------0--------------1--------------0-------------1------------0
就是不取出number1,number2,number3,number4,number5全为0的这一行记录
现在还有一个问题,就是我必须在from后面把子查询涉及到的表再写出来,然后再where做条件查询,比如:org as org,tb1 as tb1,tb2 as tb2。。。where org.id=tb1.orgid 。。。就是这里做条件,因为tb这些表里面的orgid全引自org表的id。如果不加where,会查询所有的orgid全部,就是显示出了所有的orgname,这样的数据没任何意义。用or把所有的org.id=tb1.orgid or org.id=tb2.orgid拼起来,一条数据也查不出来(是全显示出来了还是我记错了,反正这个做条件也不行)。。。iinner join 也查不出想要的数据。
where后面也只可以匹配两张表的orgid,这样是查出来了,可是也出现了之前的第一个问题,就是把查询出的某一行数据number全为0的也显示了出来,而且这样肯定也会漏掉别的表关联的orgid。
实在没法,我只有在程序里过滤了,因为查询出的统计结果为一个分页list。但是最好还是在sql里处理最安全,数据也最完善。
哪位大侠有思路没啊,给个啊。最好能给一条sql语句。先在这谢过了。。。。。
展开
 我来答
维他果粒橙
2012-01-09 · 超过11用户采纳过TA的回答
知道答主
回答量:35
采纳率:0%
帮助的人:26.2万
展开全部
select (select orgname from org as og where org.id=og.id),
(select count(*) from tb1 as t1 whree t1.orgid=org.id) as number1,
(select count(*) from tb2 as t2 whree t2.orgid=org.id) as number2,
(select count(*) from tb3 as t3 whree t3.orgid=org.id) as number3,
(select count(*) from tb4 as t4 whree t4.orgid=org.id) as number4,
(select count(*) from tb5 as t5 whree t5.orgid=org.id) as number5 ,
。。。。。。。。。。。。。。。。。。。。。。。。number18
into #table from org as org,tb as tb where org.id=tborg.id
group by org.name having count(*)>0
go
select * from #table where number1<>0 and number2<>0 and number3<>0 and number4<>0 and number5 <>0
go

文字太多看到头晕,也不知道你要的结果是不是这个意思。希望能帮到你吧!
追问
问题已解决,我是把之前的所有子查询语句当做条件,这样就是代码量多了点。。。
where (select count(*) from tb1 as t1 whree t1.orgid=org.id) >0 or (select count(*) from tb2 as t2 whree t2.orgid=org.id) >0 or 。。。这样就查询出了我想要的数据
匿名用户
2012-01-09
展开全部
select * from(你的sql)
where number1+number2+number3+number4+number5 > 0
追问
取别名做查询条件不可以的,问题已解决,不过还是谢谢你
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式