mysql使用同一个表中的行作为条件?

时间:2011-08-22 23:24:41

标签: mysql sql join nested

我有一个类似于

的表格结构
id | parent | online | name
1  | 1      | 1      | first
2  | 1      | 1      | second
3  | 1      | 1      | third

基本上我想要的是,如果列设置为离线,那么我们不会选择该列, 很容易

Select * from `table` where `online` = 1;

如果父列设置为离线,则下一部分变为离线,我们也不想选择该列。

我的工作是

SELECT t1.* FROM `table` t1 LEFT JOIN `table` t2 ON t1.`parent` = t2.`id` 
WHERE t1.`online` = 1 AND t2.`online` = 1; 

如果嵌套最多只有一层,那么哪种方法可以正常工作 如果嵌套只有一层深度,有没有更好的方法呢?

另一点是,有没有更好的方法来做到这一点,以便嵌套可以是无限量的深度?

如果存在结构,则需要允许简单(加载方式和代码方式)查询以获取一行中的所有子项,并获取具有相对于子项的嵌套级别的行的所有父项(例如,第一个父项的level为1,parent的父级为2)。

1 个答案:

答案 0 :(得分:1)

我可以建议一个答案,第一部分是嵌套是一层深的:

SELECT t1.* 
FROM `table` t1 
   INNER JOIN `table` t2 ON t1.`parent` = t2.`id`  AND t2.`online` = 1
WHERE t1.`online` = 1

我相信会更有效率,因为你增加了声明的基数。

不幸的是,多级嵌套是一个棘手的问题,我会在使用CTE的SQL Server上进行,但我在MySQL中对此不了解,抱歉。