如何用单条SQL查询获取产品及其关联产品的交错列表
产品与关联产品交错排列的SQL查询方案
要实现主产品与关联产品交错排列(关联产品紧随对应主产品)且避免大量子查询的需求,可以通过UNION ALL合并数据集并自定义排序字段来实现,具体SQL如下:
SELECT p.ProdId, p.ProdName FROM ( -- 取出所有主产品,标记为组内优先展示 SELECT p.ProdId, p.ProdName, p.ProdId AS sort_group, 1 AS sort_order FROM TABLE_products p UNION ALL -- 取出所有关联产品,关联到对应主产品的排序组,标记为组内次位展示 SELECT p.ProdId, p.ProdName, rp.ProdId_1 AS sort_group, 2 AS sort_order FROM TABLE_related_products rp JOIN TABLE_products p ON rp.ProdId_2 = p.ProdId ) combined ORDER BY sort_group, sort_order;
代码说明
- 主产品数据集:从
TABLE_products取出所有产品,用sort_group标记为自身ID作为排序组,sort_order设为1,确保主产品在组内排在最前面。 - 关联产品数据集:通过
JOIN关联TABLE_related_products和TABLE_products,取出关联产品的信息,用主产品ID(ProdId_1)作为sort_group,sort_order设为2,让关联产品紧跟对应主产品。 - 排序逻辑:最终按
sort_group(保证同一主产品及其关联产品为一组)和sort_order(保证主产品在前、关联产品在后)排序,即可得到目标交错排列的结果。
适配示例的效果
执行上述SQL后,会得到与你期望完全一致的结果:主产品1后紧跟关联产品5,主产品6后紧跟关联产品1,无关联的产品则单独展示。
这种方案避免了为每个产品编写子查询,通过JOIN和UNION ALL的组合提升了大数据量场景下的查询性能。
内容的提问来源于stack exchange,提问作者AlexLaforge
相关产品推荐
相关产品推荐

