递归MySql视图:这可能吗?

时间:2011-06-06 15:25:43

标签: mysql database recursion view

我的MySql数据库中有一个表,其中包含以下列:

- id
- parent_id
- visible

基本上,如果我有一个填充如下:

    id     name      parent_id      visible
    ------ --------- -------------- -------
    1      Admin     0              1
    2      Review    0              0
    3      Archive   2              1
    4      Support   0              1

虽然层次结构是......

1 - Admin
2 - Review
   3 - Archive
4 - Support

我希望Archive(3)基本上从它的父行继承'visible'属性 - Review(2)。我想在视图中返回此内容:

    id     name      parent_id      visible
    ------ --------- -------------- -------
    1      Admin     0              1
    2      Review    0              0
    3      Archive   2              0
    4      Support   0              1

有没有人知道在不使用存储过程的情况下MySql中是否可以这样做?

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用可见列的CASE语句在正常查询中执行此操作:

select a.id, a.name, a.parent_id,
       CASE WHEN a.parent_id = 0 
       then a.visible
       else b.visible
       end as visible
from myTable a
left join myTable b on a.parent_id = b.id

您还可以创建视图(相同代码):

create view myTableView as
select a.id, a.name, a.parent_id,
       CASE WHEN a.parent_id = 0 
       then a.visible
       else b.visible
       end as visible
from myTable a
left join myTable b on a.parent_id = b.id