1
3
因为您使用的是SQL 2005,所以应该可以访问公共表表达式(CTE),这使得递归查找产品的子级变得容易得多。你可能想看看CTE,看看这是否足以满足你的要求。 另外,我不记得这个特定的场景,我的书在家里,但是乔·塞尔科写了一篇 very good book on modeling hierarchies and trees in an RDBMS . 可能值得一看是否有更好的模型。他有一些相当巧妙的场景,用于其他场景,这些场景起初看起来并不明显,但非常有效。即使没有直接的匹配,他使用的一些技术也可能是有用的。 您所拥有的模型就是所谓的邻接列表模型。Celko还演示了如何使用所谓的嵌套集模型和路径枚举模型对层次结构进行建模。 嵌套集模型起初看起来有点复杂,但实际上在某种程度上很简单。它的更新成本更高,但从中进行选择与任何其他建模层次结构的方法相比都非常快。你可以找到它的简短描述 here . 因为一个产品可以包含在多个树中,所以您必须对它稍作调整以适应您的情况。 路径枚举模型基本上只是使用一个带分隔符(或XML)的字符串,从树的根开始列出指向相关行的路径。然后使用string(或xquery)函数来查找父级的子级等。据我所知,它只对具有单个根的树非常有用,所以我认为在您的情况下不能使用它。 |
2
1
从纯关系的角度(和我个人的角度),你所拥有的是最合乎逻辑的表达方式。当然,缺点是SQL不太适合递归。还有其他一些存储树结构的范例(这在RDBMS讨论中是一个长期存在的问题),但是我不会去研究它们,因为我通常认为它们牺牲了可读性和可维护性,而有利于查询的容易性。这可能是你需要的,但我不知道。 因为您运行的是2005,所以可以很容易地使用公共表表达式(CTE的;请参见 this MSDN article )。否则,您要么将其转换为一个多步骤过程(存储过程可能是一个很好的候选者,因为您可以从调用代码中隐藏实现的复杂性),要么通过为每个级别添加左联接来限制您愿意查看的级别数(即,产品只能嵌套3个级别深度)。 |
Community wiki · SQL语法新手 1 年前 |
KateMak · 是否将多行中的多列与唯一id组合? 1 年前 |
Karuna · SQL中列内的筛选器[重复] 1 年前 |
Irvan Affandy · 为另一个选择选择声明的键 1 年前 |
Community wiki · 这个MySQL语句出了什么问题? 1 年前 |
Community wiki · 优化从同一表中提取的多列的查询 1 年前 |