SQL Server查询需求:订单表父子订单关联查询实现咨询
解决方案:用SQL实现订单父子关联查询
没问题,这种需求完全可以用SQL搞定!我结合你的场景分两种情况给出具体的查询语句,你可以根据自己的表结构调整字段名和参数~
先假设你的表结构
先明确一下我默认的表字段(你可以替换成自己实际的字段名):
order_id: 每个订单(父/子)的唯一IDparent_order_id: 子订单的该字段等于对应父订单的order_id,父订单的这个字段通常为NULL或者0order_type: 父订单与子订单通过该字段关联(比如父子订单的order_type一致)
情况1:指定父订单ID和订单类型,返回父订单+所有子订单
当你知道目标父订单的ID和对应的订单类型时,用这个查询就能一次性拿到父订单和它所有的子订单:
SELECT * FROM orders WHERE -- 匹配父订单本身 (order_id = @target_parent_id AND order_type = @target_type) -- 匹配该父订单下的所有子订单 OR (parent_order_id = @target_parent_id AND order_type = @target_type);
这里的@target_parent_id是你指定的父订单ID,@target_type是对应的订单类型,替换成实际值或者你的参数变量就行。
情况2:指定子订单ID,返回对应的父订单
如果只知道某个子订单的ID,要找到它的父订单,用自连接查询就可以:
SELECT parent.* FROM orders child INNER JOIN orders parent ON child.parent_order_id = parent.order_id WHERE child.order_id = @target_child_id;
@target_child_id是你指定的子订单ID,查询结果就是这个子订单对应的父订单记录。
可选:通用查询(自动适配两种场景)
如果你想做一个通用的查询,根据传入的参数自动判断是哪种场景,可以用条件逻辑实现:
SELECT DISTINCT o.* FROM orders o LEFT JOIN orders child ON o.order_id = child.parent_order_id WHERE -- 场景1:传入父订单ID和类型时触发 (@input_parent_id IS NOT NULL AND @input_type IS NOT NULL AND (o.order_id = @input_parent_id OR o.parent_order_id = @input_parent_id) AND o.order_type = @input_type) -- 场景2:传入子订单ID时触发 OR (@input_child_id IS NOT NULL AND o.order_id = (SELECT parent_order_id FROM orders WHERE order_id = @input_child_id));
使用时只需传入对应的参数(比如传入@input_parent_id和@input_type就走场景1,传入@input_child_id就走场景2),非常灵活。
内容的提问来源于stack exchange,提问作者Sabyasachi Mukherjee
相关产品推荐
相关产品推荐

