mysql - 如何在mysql中查看 parent 是否有 child ?

标签 mysql sql search

如何在mysql表中查询Parent是否有Child?我只是检查一个数据库并使用递归来做这件事,因为所有数据都在同一个表中。但是它有很多数据,比如 100k 的寄存器。并且不是在mysql中做递归搜索是在代码(Java)中做的,所以软件很慢。

id  | id_parent         
1         null              
2         1           
3         2
4         null
5         3

现在我需要得到最后一个 child !

 id      | id_parent          
  5           3 

或者获取 id 是否有用于在代码中执行和执行多个查询的子项。

例子:

   if(i.id have child)
   {
    then do a search of the child
   }    
   else
   return the same valor

请帮忙。递归搜索是一个慢动作。从表中仅搜索 2 条记录需要 10 分钟。而且我无法更改数据库或表。

----编辑2---- 感谢所有答案,现在我找到了原始来源。一个

  id      | id_orig          
  5           1 

我是通过代码来完成的,感谢大家。我的解决方案基于您的回答

最佳答案

您只需要最后一个 child 的列表?这很简单:

select child.id, child.id_parent
from people as child
left join people as no_child on no_child.id_parent = child.id
where no_child.id is null;

一般来说,递归在 SQL 中很难,但是有一些事情可以不用递归来完成。

另一种选择:如果你真的只有几个 100k 条目,只需尝试在 java 中保持良好的数据结构与数据库同步。这种数据结构可以非常快速地搜索而无需向数据库发出请求。如果只有来自一台服务器的一个应用程序将写入该表并且写入不是太频繁,这当然是有效的。

另一种选择:在表中添加一个额外的列“last_child”,并在每次写入请求时小心更新它。由于这不需要递归,因此您可以为此返回到正常的 SQL。这取决于您是否对父子关系进行大量数据更改,是否需要删除条目等,但如果您想这样做,我们可以编写一些更新语句。

删除

关于mysql - 如何在mysql中查看 parent 是否有 child ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32632943/

相关文章:

php - Cron 作业无法正常工作;是什么错误还是其他方法?

php - 不区分大小写但敏感

使用 Solr 搜索和匹配短语的计数

python - 使用 for 循环的二进制搜索,在列表中搜索单词并进行比较

mysql - 先复制然后更改mysql中复制数据的ID

php - 如何在 2 个查询之间共享 connection_id?

SQL 连接, "there is an entry for table but it cannot be referenced"

php - 连接 2 个表并根据其关联 ID 重复显示同一列

php - 如何在超链接中显示PHP变量?

mysql - 查询计算性别百分比