一 定义
自连接:数据表与自身进行连接。
二 需求
从一个包含栏目ID , 栏目名称和父栏目ID的表中查询父栏目名称和其他子栏目名称。
三 分析
将一张表分为父表和子表
父表
| categoryid |
categoryName |
| 2 |
信息技术 |
| 3 |
软件开发 |
| 5 |
美术设计 |
子表
| categoryid |
pid |
categoryName |
| 4 |
3 |
数据库 |
| 6 |
3 |
web开发 |
| 7 |
5 |
ps技术 |
| 8 |
2 |
办公信息 |
四 实战
-- 1 创建一个表
CREATE TABLE `category` (
`categoryid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主题id',
`pid` INT(10) NOT NULL COMMENT '父id',
`categoryName` VARCHAR(50) NOT NULL COMMENT '主题名字',
PRIMARY KEY (`categoryid`)
) ENGINE=INNODB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8-- 2 插入数据
INSERT INTO `category` (`categoryid`, `pid`, `categoryName`)
VALUES('2','1','信息技术'),
('3','1','软件开发'),
('4','3','数据库'),
('5','1','美术设计'),
('6','3','web开发'),
('7','5','ps技术'),
('8','2','办公信息');-- 3 编写SQL语句,将栏目的父子关系呈现出来 (父栏目名称,子栏目名称)
-- 核心思想:把一张表看成两张一模一样的表,然后将这两张表连接查询(自连接)
SELECT a.categoryName AS '父栏目',b.categoryName AS '子栏目'
FROM category AS a,category AS b
WHERE a.`categoryid`=b.`pid`