gpt4 book ai didi

sql - 如何检索没有那些 child 的子类别?

转载 作者:行者123 更新时间:2023-11-30 21:23:36 24 4
gpt4 key购买 nike

这是我的陈述:

SELECT (
COUNT( parent.categoryName ) - ( sub_tree.depth +1 ) ) AS depth,
CONCAT( REPEAT( '', ( COUNT( parent.categoryName ) - ( sub_tree.depth +1 ) ) ) , node.categoryName ) AS categoryName

FROM
Categories AS node,
Categories AS parent,
Categories AS sub_parent,
(
SELECT node.categoryName, (
COUNT( parent.categoryName ) -1) AS depth
FROM
Categories AS node,
Categories AS parent
WHERE
node.categoryLft BETWEEN parent.categoryLft AND parent.categoryRgt
AND node.categoryName LIKE 'Product'

GROUP BY node.categoryName
ORDER BY node.categoryLft
) AS sub_tree
WHERE
node.categoryLft BETWEEN parent.categoryLft AND parent.categoryRgt
AND node.categoryLft BETWEEN sub_parent.categoryLft AND sub_parent.categoryRgt
AND sub_parent.categoryName = sub_tree.categoryName

GROUP BY node.categoryName
ORDER BY node.categoryLft

效果很好,但我想修改它以仅获取所选类别(此处为“产品”)旁边的第一个节点,而没有子类别的子节点

喜欢:产品:

  • 类型A

    • 亚型A

    • 亚型B

  • 类型B

我想得到 'TypeA', 'TypeB'。

顺便说一句,这是我的 table :

CREATE TABLE `Categories` (
`categoryId` int(11) NOT NULL auto_increment,
`categoryLft` int(11) NOT NULL,
`categoryRgt` int(11) NOT NULL,
`categoryName` varchar(255) default NULL,
`categoryAlias` varchar(255) default NULL,
PRIMARY KEY (`categoryId`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8

最佳答案

SELECT  child.*
FROM categories parent
JOIN categories child
ON child.categoryLft BETWEEN parent.categoryLft AND parent.categoryRgt
WHERE parent.id = @id_of_products
AND NOT EXISTS
(
SELECT NULL
FROM categories grandchild
WHERE grandchild.categoryLft BETWEEN child.categoryLft AND child.categoryRgt
)

嵌套集 您正在使用的模型非常难以管理。

您可能想阅读我博客中的这篇文章:

描述了如何在 MySQL 中实现更简单的 adjacency list 模型。

关于sql - 如何检索没有那些 child 的子类别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1445453/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com