gpt4 book ai didi

MySql:按父级然后子级分组

转载 作者:行者123 更新时间:2023-11-29 06:45:38 27 4
gpt4 key购买 nike

我有一个父子表结构,例如:

CREATE TABLE t (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`),
`parent` int(10) unsigned DEFAULT NULL, INDEX parent(`parent`),
`attr` tinyint(1) NOT NULL DEFAULT '0'
);

INSERT INTO t SET id=1, parent=null, attr=1;
INSERT INTO t SET id=2, parent=1, attr=1;
INSERT INTO t SET id=3, parent=1, attr=1;
INSERT INTO t SET id=4, parent=null, attr=0;
INSERT INTO t SET id=5, parent=4, attr=1;
INSERT INTO t SET id=6, parent=4, attr=1;
INSERT INTO t SET id=7, parent=null, attr=1;
INSERT INTO t SET id=8, parent=null, attr=0;

我想查询“attr=1”。结果应该是:

  • 如果找到父级,则输出父级,不输出子级

  • 如果找到了子级但未找到父级,则显示找到的子级

因此,根据上面的测试数据,结果应该是 ids 1, 5, 6, 7。

我尝试过类似的东西:

SELECT id, parent FROM t WHERE attr=1 GROUP BY COALESCE(parent, id);

但这只能找到 id 1、5、7,而不是 id 6。

这里4不会被当作attr = 0

这只是一个简化的测试结构,因此如果可以避免连接或子选择以保持查询快速,那就太好了。

最佳答案

您可能正在寻找类似的东西,使用自加入

SELECT COALESCE(parent.id, child.id)
FROM t child
left join t parent on (parent.id = child.parent and parent.attr = 1 )
WHERE child.attr = 1
GROUP BY COALESCE(parent.id, child.id)

关于MySql:按父级然后子级分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49608339/

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