mysql - MySQL 中的 SELECT 树

标签 mysql sql

当我将此逻辑移至我的脚本语言时,我的应用程序非常慢。我希望有一种方法可以利用 MySQL 本身。

考虑下表

ID' col1 ' ' col2'
-----------------
1 '   1  ' '  2  '
-----------------
2 '   2  ' '  3  '
-----------------
3 '   3  ' '  4  '
-----------------
4 '   5  ' '  4  '
-----------------

有没有办法选择 col1 为 1 的所有记录,或者 col1 是否是前一个匹配行的 col2?

例如,如果我说我需要与 1 相关的所有记录,我希望获得第 1、2 和 3 行。

这是一个查询示例,但它只到达第一层深度。

SELECT col2 FROM table WHERE (col1 = 1) OR (col1 IN (SELECT col2 FROM table WHERE (col1 = 1))) 

最佳答案

您将需要创建一个存储过程,它循环遍历您的树,直到找不到更多的 child 。参见 Recursive mysql select?如何做到这一点!

在其他 DBMS 中,您可以使用 WITH RECURSIVE,但 MySQL 不支持它。在此处阅读有关 MySQL 模拟的更多信息:
http://guilhembichot.blogspot.de/2013/11/with-recursive-and-mysql.html
基本上它和以前一样,但背后有更多的解释。

首先可能还有其他方法来存储数据以避免此类循环查询:
What is the most efficient/elegant way to parse a flat table into a tree?

关于mysql - MySQL 中的 SELECT 树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26666894/

相关文章:

php - 错误 1064 - MySQL

mysql - 在一次查询中查询具有某个状态的所有记录加上最后一条(无论是什么状态)

c# - 如何使用 C# 从 Firebird 读取二进制 blob 到 byte[]?

mysql - 两个索引的内部连接的 Big-Oh 性能

php - 使用事务锁定表,在同一事务中删除然后插入

Mysql解释查询显示类型 “ALL”

mysql - 复制表行,但使用另一个值

mysql - 错误 1115 (42000) : Unknown character set: 'utf8mb4'

sql - 将两个日期时间字段组合成 T-SQL 中的两个单独的列

sql - 如何使用 Netezza 将日期时间转换为日期