我在下面有这个查询。它在层次结构中提供类别的名称及其深度。深度是“AS”值。但是,我希望能够仅选择具有特定深度的名称。即深度= 3.我已经用谷歌搜索死了并尝试创建一个虚拟列,但我对sql并不擅长。有什么建议? TKS!
SELECT node.name, (COUNT(parent.name) - 1) AS depth
FROM nested_categories AS node,
nested_categories AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
GROUP BY node.name
ORDER BY depth
答案 0 :(得分:3)
您需要使用HAVING子句。这与WHERE子句非常相似,但它稍后会在进程中计算,因此可以在聚合列上运行:
SELECT node.name, (COUNT(parent.name) - 1) AS depth
FROM nested_categories AS node,
nested_categories AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
GROUP BY node.name
HAVING depth = 3
ORDER BY depth
根据您的数据库引擎,您可能需要将其编写为:
SELECT node.name, (COUNT(parent.name) - 1) AS depth
FROM nested_categories AS node,
nested_categories AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
GROUP BY node.name
HAVING (COUNT(parent.name) - 1) = 3
ORDER BY depth
答案 1 :(得分:1)
SELECT depth
FROM ((COUNT(parent.name) - 1)
FROM nested_categories AS node,
nested_categories AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
GROUP BY node.name
ORDER BY depth) AS depth
WHERE depth=3;