【发布时间】:2022-01-27 16:24:39
【问题描述】:
我想要一个基于关联的“产品”返回“订单”的 SQL 查询,“产品.DepositId”必须等于一个精确的整数值(例如 Product.DepositId = 1)。
如果关联的 'Product.DepositId' 为空,则查询需要使用 'Product.ParentId' 沿着 Product 阶梯向上获取父级 'Product',依此类推。
- “产品”父层次结构可以进入“N”层/层。 (例如 Child -> ChildParent -> ChildParent -> Final Parent)
- 多个“产品”子级可以关联到同一个父级
- 只有最顶层的父“产品”会有一个 DepositId。因此,如果“Product.ParentId”为空,则“Product.DepositId”不会为空
- “订单”可以与子“产品”或父“产品”相关联。 (家长也可以有订单。)
例如(为了简单起见,我使用整数 ID 代替唯一标识符)
产品
Id ParentId DepositId
1 NULL 10
2 NULL 20
3 1 NULL
4 2 NULL
5 1 NULL
6 3 NULL
订单
Id ProductId
1001 1
1002 2
1003 3
1004 4
1005 5
1006 6
DepositId = 10 的预期结果订单
OrderId ProductId
1001 1 --Because Product 1 DepositId = 10
1003 3 --Because Product 3 is child of Product 1
1005 5 --Because Product 5 is child of Product 1
1006 6 --Because Product 6 is child of Product 3 which in
turn is a child of Product 1
【问题讨论】:
-
minimal reproducible example 在询问 SQL 问题时是一个很好的开始。
-
根据问题指南,请不要发布代码、数据、错误消息等的图像 - 将文本复制或输入到问题中。请保留将图像用于图表或演示渲染错误,无法通过文本准确描述的事情。
-
根据问题指南,请展示您的尝试并告诉我们您发现了什么(在本网站或其他地方)以及为什么它不能满足您的需求。
标签: sql sql-server tsql