如何在MySQL中对“AS”值进行SELECT。

时间:2016-11-25 00:28:08

标签: mysql

我在下面有这个查询。它在层次结构中提供类别的名称及其深度。深度是“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

2 个答案:

答案 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;