【发布时间】:2013-01-17 11:28:56
【问题描述】:
我看到了this answer,我希望他是不正确的,就像有人错误地告诉主键在一个列上,而我不能在多个列上设置它。
这是我的桌子
create table Users(id INT primary key AUTO_INCREMENT,
parent INT,
name TEXT NOT NULL,
FOREIGN KEY(parent)
REFERENCES Users(id)
);
+----+--------+---------+
| id | parent | name |
+----+--------+---------+
| 1 | NULL | root |
| 2 | 1 | one |
| 3 | 1 | 1down |
| 4 | 2 | one_a |
| 5 | 4 | one_a_b |
+----+--------+---------+
我想选择用户 id 2 并递归,以便我得到它的所有直接和间接子项(所以 id 4 和 5)。
我如何以这样的方式编写它?我在 postgresql 和 sqlserver 中看到了递归。
【问题讨论】:
-
比尔·卡尔文是正确的。 MySQL 没有任何递归查询函数,就像
SQL Server一样,因为它有CTE。但递归的行为仍然可以模拟。:D -
我不认为你可以通过单个查询在 MySQL 中进行递归,但我已经通过存储过程完成了类似的父层次结构查询,这些过程一直在寻找父级别,直到找不到更多父条目。 . 但是通过完成后删除的临时表完成......这对你有用吗?
-
@DRapp:这可能是可以接受的。无论哪种方式学习都会很有趣