如何获得树视图? MySQL的

时间:2013-12-16 07:15:27

标签: mysql sql select join left-join

我有以下表格:

规范

id | name
-----------
1  | hello
2  | world
3  | foo
4  | bar

属性

name   | value  | specID
---------------------
status | finish | 1
parent | 2      | 1
status | work   | 2
parent | 3      | 2
status | ...    | 4
parent | 3      | 4

现在我想说:

  

列出specID 3下的所有规格。

我现在没有降低等级,但结果必须是:

id | name  | parent
------------------
 3 | foo   |  NULL
 2 | world | 3
 1 | hello | 2
 4 | bar   | 3

我如何在mysql中执行此操作?

3 个答案:

答案 0 :(得分:1)

试试这个:

SELECT s.id, s.name, p.value AS parent
FROM specifications s 
LEFT JOIN properties p ON s.id = p.specID AND p.name = 'parent'; 

答案 1 :(得分:1)

你可以这样试试

SELECT 
    s.id,
    s.name,
    IFNULL(p.value,0) as parent
FROM  specifications s
LEFT JOIN properties p 
    ON p.specID = s.id 
    AND p.name  ='parent'
ORDER BY parent 

输出

| ID |  NAME | PARENT |
|----|-------|--------|
|  3 |   foo |      0 |
|  1 | hello |      2 |
|  2 | world |      3 |
|  4 |   bar |      3 |

Fiddle

答案 2 :(得分:0)

MySQL没有任何允许您编写递归查询的语法结构。因此,使用此模式,没有方便的方法来检索完整的树 - 至少不是使用SELECT查询。

您可以尝试将架构重新修改为“物化路径”,或“嵌套集”或“嵌套间隔”解决方案。有关详细信息,请参阅这些文章:

http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/ http://sigmod.acm.org/publications/sigmod-record/0506/p47-article-tropashko.pdf