我有以下表格:
规范:
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中执行此操作?
答案 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 |
答案 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