mysql父子关系表查询

更新时间:02-08 教程 由 趁年轻 分享

MySQL 是一种流行的关系型数据库管理系统。它具有许多功能,其中之一是父子关系表查询。父子关系表在数据库设计中很常见,因为它们可以用于构建层次结构。

CREATE TABLE `category` (`id` int(11) NOT NULL AUTO_INCREMENT,`parent_id` int(11) DEFAULT NULL,`name` varchar(255) NOT NULL,PRIMARY KEY (`id`),KEY `parent_id` (`parent_id`),CONSTRAINT `category_ibfk_1` FOREIGN KEY (`parent_id`) REFERENCES `category` (`id`) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE=InnoDB DEFAULT CHARSET=utf8;INSERT INTO `category` (`id`, `parent_id`, `name`)VALUES(1, NULL, '手机'),(2, 1, '智能手机'),(3, 1, '老人手机'),(4, 2, '华为手机'),(5, 2, '小米手机'),(6, 2, '苹果手机');

在这个示例中,我们建立了一个叫做 "category" 的表,它包含三个列: "id", "parent_id" 和 "name"。

"id" 列用于标识每个分类的唯一性。

"parent_id" 列用于表示该分类的父级分类。如果该分类是根分类,则该列的值为 NULL。

"name" 列用于存储分类名称。

下面是一个查询语句,它能够返回所有分类以及它们的子分类:

SELECTc1.name AS level1,c2.name AS level2,c3.name AS level3FROMcategory AS c1LEFT JOIN category AS c2 ON c2.parent_id = c1.idLEFT JOIN category AS c3 ON c3.parent_id = c2.idWHEREc1.parent_id IS NULL;

这个查询使用LEFT JOIN来连接 "category" 表三次,每个连接都连接到同一个表,但是使用不同的表别名。

第一次连接将 "c1" 表连接到 "category" 表,用于获取根级分类 "level1"。

第二次连接将 "c2" 表连接到 "category" 表,用于获取 "level2" 的子类别,这些子类别的父级分类被设置为 "level1" 的 "id"。

第三次连接将 "c3" 表连接到 "category" 表,用于获取 "level3" 的子类别,这些子类别的父级分类被设置为 "level2" 的 "id"。

最后,查询使用WHERE子句限制了只返回根级别分类。我们通过检查 "c1.parent_id" 是否为 NULL 来判断这点。

声明:关于《mysql父子关系表查询》以上内容仅供参考,若您的权利被侵害,请联系13825271@qq.com
本文网址:http://www.25820.com/tutorial/14_2083038.html