无限级分类
无限级分类简直讲的是一头雾水
无限级分类简直讲的是一头雾水
2016-01-14
“无限极分类”其实讲的就是“自身连接”(类似编程中的递归,进行函数自身调用推演),而“自身连接”实际是左外连接和右外连接的应用,但是“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~
举报