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,该表用来描述一个树状的关系,如说某个人是另一个人的上级。
接下来,我们准备插入一些基础数据,用来展示自关联查询:
```sqlINSERT 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中执行自关联查询并不复杂,只要掌握好语句中的每个关键字,就可以灵活、快速的提取出符合要求的数据。