为了账号安全,请及时绑定邮箱和手机立即绑定

无限级分类

无限级分类简直讲的是一头雾水

正在回答

1 回答

“无限极分类”其实讲的就是“自身连接”(类似编程中的递归,进行函数自身调用推演),而“自身连接”实际是左外连接和右外连接的应用,但是“8.8 存储过程与自定义函数的区别”中老师讲解得确实太快了,中间是需要拆分才能较好的理解,课程中主要讲了两个应用:
1、查询所有分类及其父类,即各商品的分类(注:p是父类,s是子类)

【SQL语句1】
SELECT s.type_id,s.type_name,p.type_name FROM tdb_goods_types AS s LEFT JOIN tdb_goods_types AS p ON s.parent_id = p.type_id;

2、查询所有分类及其子类,即各分类包含的商品

【SQL语句2】
SELECT p.type_id,p.type_name,s.type_name FROM tdb_goods_types AS p LEFT JOIN tdb_goods_types AS s ON s.parent_id=p.type_id;

第1个应用比较简单,实际就是左外连接,不记得的可以再看看“5.10 外连接OUTER JOIN”的案例对比理解,只不过8.8课程的案例两张相同的表的左外连接,但操作都是左外连接,没有本质区别:

左外连接效果测试,查询商品表全部记录并显示分类信息:
SELECT a.goods_id,a.goods_name,b.cate_name FROM tdb_goods AS a LEFT JOIN tdb_goods_cates AS b ON a.cate_id=b.cate_id;

而第2个应用,实际是老师是偷了个懒,表面上看好像是左外连接(因为用了LEFT JOIN),实际是有明显区别,因为我们普通的左外连接是左表(p)尾连右表(s)头(p.parent_id=s.type_id),而第2个应用中是左表(p)头连右表(s)尾(s.parent_id=p.type_id),其实应该把那个语句转换成等价右外连接语句来看:

【SQL语句3】
SELECT p.type_id,p.type_name,s.type_name FROM tdb_goods_types AS s RIGHT JOIN tdb_goods_types AS p ON s.parent_id = p.type_id;

同时你可以把第1个应用的SQL语句中“LEFT JOIN”改成“RIGHT JOIN”,如下:

【SQL语句4】
SELECT s.type_id,s.type_name,p.type_name FROM tdb_goods_types AS s RIGHT JOIN tdb_goods_types AS p ON s.parent_id = p.type_id;

通过对比“SQL语句3”和“SQL语句4”,你会发现这两个有着某种重读的相似之处,具体怎么相似,我建议楼主还是亲手操作查询一遍,将几张查询表放在一起对比一下,你会有些领悟的O(∩_∩)O~

3 回复 有任何疑惑可以回复我~
#1

kuhaku_

感谢!看了你的讲解懂了,第二个应用用右连接来想感觉好理解多了
2018-12-28 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
与MySQL的零距离接触
  • 参与学习       396886    人
  • 解答问题       3353    个

本课程涵盖全部MySQL数据库的基础,学习MySQL数据库的基础知识

进入课程

无限级分类

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信