MySQL 主键自关联查询实践(mysql自关联查询)

随着MySQL数据库的普及,数据表和数据量不断扩大,在新的表中,经常会遇到一些复杂的查询,MySQL 主键自关联查询也是其中常用的一种。本文将通过一个简单的范例,来讲解在MySQL中如何进行类似的自关联查询。

首先,我们创建一张名为“users”的数据表,用于存储用户信息。

“`sql

CREATE TABLE users (

id int(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,

parent_id int(11) DEFAULT NULL,

name varchar(100) NOT NULL

);


其中主键“id”标识用户,而“parent_id”则为每个用户的上级用户的ID,该表用来描述一个树状的关系,如说某个人是另一个人的上级。

接下来,我们准备插入一些基础数据,用来展示自关联查询:

```sql
INSERT INTO users (name, parent_id) VALUES
('John', NULL),
('Will', NULL),
('Mary', 1),
('Alex', 2),
('Johny', 3);

在“users”表中,John被设置为所有人的最高上级,而Will则是John的下级,而Mary则是Will的下级,而Johny则是Mary的下级。

现在,我们想要查询id为4的用户的所有上级的信息,即John -> Will -> Mary,我们可以运行以下SQL语句:

“`sql

SELECT name, parent_id

FROM users

WHERE FIND_IN_SET(id, (

SELECT GROUP_CONCAT(id)

FROM users

WHERE FIND_IN_SET(id, (

SELECT GROUP_CONCAT(parent_id)

FROM users

WHERE id = 4

))

))


上面的查询语句首先会根据id=4查询出 Alex 的所有上级的ID,即parent_id为2和1。

然后,使用这些上级ID,重新查询表中所有相关记录,从而获取所有上级用户的信息,即name和parent_id。

最后,我们就可以得到我们想要的结果:

name parent_id

John NULL

Will 1

Mary 2


从上面的范例中可以看出,在MySQL中执行自关联查询并不复杂,只要掌握好语句中的每个关键字,就可以灵活、快速的提取出符合要求的数据。

数据运维技术 » MySQL 主键自关联查询实践(mysql自关联查询)