MySQL5.7表:org包含字段:id code name parent_id 查询所有数据并查询数据的所有的父级ID,用/拼接成id_seq
时间: 2024-10-22 21:10:50 浏览: 22
在MySQL 5.7中,如果你想要查询`org`表的所有数据,并获取每个记录及其所有父级的`id`值,可以使用递归查询或者自连接(JOIN)。这里我们假设有一个辅助表`org_hierarchy`用于存储组织结构,其中包含`id`, `code`, `name`以及`parent_id`,并且`org.id = org_hierarchy.id`。
首先,创建一个辅助表`org_hierarchy`(如果不存在的话):
```sql
CREATE TABLE IF NOT EXISTS org_hierarchy (
id INT PRIMARY KEY,
code VARCHAR(255),
name VARCHAR(255),
parent_id INT,
hierarchy_path VARCHAR(255) DEFAULT ''
);
```
然后,使用递归查询(MySQL不直接支持无限递归,但你可以通过增加一个额外的层级数限制来达到目的):
```sql
DELIMITER //
CREATE PROCEDURE getAllParentsAndIds(IN org_id INT)
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE cur CURSOR FOR SELECT * FROM org_hierarchy WHERE id = org_id OR parent_id = org_id;
DECLARE @current_row OrgHierarchy%ROW_TYPE;
OPEN cur;
REPEAT
FETCH cur INTO @current_row;
IF @current_row.parent_id IS NOT NULL THEN
SET @hierarchy_path = CONCAT(@hierarchy_path, '/', @current_row.id);
INSERT INTO org_hierarchy (id, code, name, parent_id, hierarchy_path)
VALUES (@current_row.id, @current_row.code, @current_row.name, @current_row.parent_id, @hierarchy_path);
END IF;
UNTIL done END REPEAT;
CLOSE cur;
END;;
DELIMITER ;
CALL getAllParentsAndIds(0); -- 从根节点开始查询
SELECT * FROM org_hierarchy WHERE hierarchy_path LIKE '%/%';
```
上面的SQL会创建一个存储过程,从指定的`id`开始(这里是0,即根节点),然后逐层向下查找所有父级的`id`。最后,查询返回的结果就是所有父级的`id`序列,它们用斜杠(`/`)分隔。
阅读全文