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

为什么查看父表的ID和名称以及子表的名称会出现这种样式的结果和查看子表ID、名称和父表的名称会不一样。

规律我倒是能总结出来,但是我反反复复看了一上午,就是搞不明白,为什么会出现12分13秒那种样式的表格,为什么会和前面的输出结果不一样。

正在回答

2 回答

原因在于建立表的时候就将type_id 与parent_id 做了关联

| type_id | type_name       | parent_id |
+---------+-----------------+-----------+
|       1 | 家用电器        |         0 |
|       2 | 电脑、办公      |         0 |
|       3 | 大家电          |         1 |
|       4 | 生活电器        |         1 |
|       5 | 平板电视        |         3 |
|       6 | 空调            |         3 |
|       7 | 电风扇          |         4 |
|       8 | 饮水机          |         4 |
|       9 | 电脑整机        |         2 |
|      10 | 电脑配件        |         2 |
|      11 | 笔记本          |         9 |
|      12 | 超级本          |         9 |
|      13 | 游戏本          |         9 |
|      14 | CPU             |        10 |
|      15 | 主机            |        10 |

看上面的输出,家用电器和电脑办公的parent_id 为0,而type_id列 没有为0的,所以他们没有父类;大家电和生活电器的parent_id为1,那么type_id为1的就是家用电器,所以家用电器是他们的父类;依次类推,平板电视和空调的父类就是大家电。。。。

那么也就是说要用子表的parent_id去和父表的type_id做连接。也就是说x.parent_id,这个x是谁谁就是子表

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;

这一段是用子表左交父表,由于0父表没有,所以会产生NULL

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;

这一段使用父表左交子表,子表中没有5,6,7,8,11,12,13,14,15,这9项子表中没有,所以产生9个NULL.

后面再通过GROUP BY,ORDER BY,就产生出你看到的那些

2 回复 有任何疑惑可以回复我~

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;   

SELECT s.type_id,s.type_name,p.type_name FROM tdb_goods_types AS s LEFT JOIN tdb_goods_types AS  p ON p.parent_id = s.type_id;

注意两条语句 ON 条件不同,上面显示的是所有类及其父类 ,下面显示的是所有类及其子类,我好晕,谁能救救我

0 回复 有任何疑惑可以回复我~

举报

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

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

进入课程

为什么查看父表的ID和名称以及子表的名称会出现这种样式的结果和查看子表ID、名称和父表的名称会不一样。

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