一个三张表的联合查询

jeakgreat 2009-10-16 03:53:50
一级分类表a
cid,name
二级分类表b
sid,name,cid(一级分类表中的cid)
三级分类c
id,name,sid(二级分类表中的sid)

现在需要取得一级分类的cid,name,及统计有多少的所属二级分类和三级分类

请各位指点下,谢谢
...全文
901 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
rmini 2011-05-29
  • 打赏
  • 举报
回复
怎么在论坛里上传截图啊
superwind369 2009-12-09
  • 打赏
  • 举报
回复
我大概看了一下就是一个三级查询,类似于我前几天做得,从部门表查人员,从人员表查文献,您看是不是这个道理啊,然后对文献统计
ACMAIN_CHM 2009-10-16
  • 打赏
  • 举报
回复
楼主啊,你提供的数据似乎不对吧。建议提供的数据自己先测试一下。

mysql> select * from a;
+-----+--------+
| cid | name |
+-----+--------+
| 1 | baidu |
| 2 | google |
+-----+--------+
2 rows in set (0.00 sec)

mysql> select * from b;
+-----+-----------+------+
| sid | name | cid |
+-----+-----------+------+
| 1 | tb.baidu | 1 |
| 2 | ta.baidu | 1 |
| 3 | te.google | 2 |
| 4 | tq.google | 2 |
+-----+-----------+------+
4 rows in set (0.00 sec)

mysql> select * from c;
+----+------+------+
| id | name | sid |
+----+------+------+
| 1 | aa | 1 |
| 2 | bb | 1 |
| 3 | cc | 2 |
| 4 | dd | 3 |
| 5 | qq | 4 |
| 6 | ww | 4 |
| 41 | tt | 4 |
+----+------+------+
7 rows in set (0.00 sec)

mysql>

mysql> select a.cid,a.name,count(distinct b.sid),count(c.id)
-> from a left join b on a.cid=b.cid
-> left join c on b.sid=c.sid
-> group by a.cid,a.name;
+-----+--------+-----------------------+-------------+
| cid | name | count(distinct b.sid) | count(c.id) |
+-----+--------+-----------------------+-------------+
| 1 | baidu | 2 | 3 |
| 2 | google | 2 | 4 |
+-----+--------+-----------------------+-------------+
2 rows in set (0.01 sec)

mysql>
jeakgreat 2009-10-16
  • 打赏
  • 举报
回复
解决了,谢谢两位
WWWWA 2009-10-16
  • 打赏
  • 举报
回复
select a.cid,a.name,count(b.sid),count(c.id)
from 一级分类表 a left join 二级分类表 b on a.cid=b.cid
left join 三级分类 c on b.sid=c.sid group by a.cid,a.name
ACMAIN_CHM 2009-10-16
  • 打赏
  • 举报
回复
select a.*,count(distinct b.sid),count(c.id)
from a left join b on a.cid=b.cid
left join c on b.sid=c.sid


[Quote]为了方便查询是否需要创建视图[/Quote]

可以创建,但仅是书写方便,不会有什么效率上的提高。
jeakgreat 2009-10-16
  • 打赏
  • 举报
回复
a 表
cid,name
1 ,baidu
2 ,google
b 表
sid,name, cid(一级分类表中的cid)
1, tb.baidu ,1
2, ta.baidu ,1
3, te.google ,2
4, tq.google ,2
c 表
id,name,sid(二级分类表中的sid)
1, aa, 1
2, bb, 1
3, cc, 2
4, dd, 3
4, tt, 4
5, qq, 4
6, ww, 4

要得到的结果
1 ,baidu,2(二级分类数),3(三级分类数)
2 ,google,3 (二级分类数), 4(三级分类数)
wwwwb 2009-10-16
  • 打赏
  • 举报
回复
贴记录及要求结果出来看看
select a.cid,a.name,count(b.sid),count(c.id)
from 一级分类表 a left join 二级分类表 b on a.cid=b.cid
left join 三级分类 c on b.sid=c.sid
jeakgreat 2009-10-16
  • 打赏
  • 举报
回复
为了方便查询是否需要创建视图

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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