gpt4 book ai didi

MySQL同表层次关系: how to exclude parents?

转载 作者:行者123 更新时间:2023-11-29 12:28:26 28 4
gpt4 key购买 nike

我有一个这样的表:

DESC mytable

id | parent
1 | 2
2 | null
3 | null
4 | null
5 | 3
... | ...

3种条目:

  • 不是父项且没有父项的条目(例如:4)
  • 不是父项且有父项的条目(例如:1,5)
  • 作为父项[并且没有父项]的条目(例如:2,3)

我正在尝试获取不是父级的每一行。

首先我尝试了这个:

SELECT * FROM mytable WHERE id NOT IN (SELECT DISTINCT parent FROM mytable);

它太慢了,所以我尝试了这个:

SELECT m.* FROM mytable m
# tmp.* will contain the first child
LEFT JOIN mytable tmp ON tmp.parent = m.id
# only rows with no children
WHERE tmp.id IS NULL

但是还是太慢了...

在我的第二个查询中,我知道 MySQL 会获取每个子项,但只将第一个子项存储在 tmp.* 中,但我找不到一种有效方法将搜索限制为 1 个子项。 (我查看了 here 和其他网站)

您对如何缩短执行时间有什么想法吗?

感谢您的帮助

最佳答案

连接当然可以工作,但您也可以使用存在...我不确定哪个在解释中运行得更好。如果您也为父列建立索引可能会有所帮助。

试试这个:

SELECT m.* FROM mytable m WHERE NOT EXISTS (SELECT 1 FROM mytable WHERE parent = m.ID) 

关于MySQL同表层次关系: how to exclude parents?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27948835/

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