4
|
Stephane Grenier · 技术社区 · 15 年前 |
![]() |
1
16
无组版本:
|
![]() |
2
12
单独联接表以查找是否有子表:
|
![]() |
3
2
如果您已经知道父ID,那么查询很简单——只需选择具有该父ID的行数。
|
![]() |
4
2
对你的问题有非常有效的答案,这是可行的。但是,如果您的数据集非常大,我将考虑这种查询的性能。 如果要使用GroupBy或Sub查询获取数据,请确保ID列和父列都有单独的索引。 为了获得更好的性能,您应该添加一个名为“hasschildren”的列,该列可以是“bit”数据类型。然后,在插入或删除项目时,应根据应用程序代码更新此列。这将允许您运行更快的查询:
|
![]() |
5
1
上面的解决方案是好的,但是你不应该添加像“hasschildren”这样的列,除非你真的有性能问题(见gatekiller的帖子)。这样的列会使数据库非规范化,即同一条信息将存储在两个位置,这使得您的数据更有可能变得不一致。每当插入新的子级、删除现有的子级或更新子级的父级时,都必须维护此列。 |
|
Johnny T · 基于当前值的SQL合并表[重复] 7 月前 |
![]() |
anandyn02 · 按名称连接两个表并分组 1 年前 |
![]() |
David Robie · 删除以XXX开头并符合条件的列 1 年前 |
![]() |
swat · 在同一列上选择SQL语句 1 年前 |
![]() |
Santi · Shadcn/ui选择-当用户选择项目时更改状态 1 年前 |