You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DB2 9.7.01多表查询问题:CASE WHEN子查询未返回预期结果

解决DB2 9.7.01中按type返回对应产品的查询问题

我先根据你的描述推断下大致的表结构(如果和实际有出入,你可以调整字段名):

  • 表A:包含id(记录ID)、type('K'或'P')、target_id(关联产品/套件的ID,P类型关联表B的产品ID,K类型关联表C的套件ID)
  • 表C(套件表):有kit_id(套件ID)和product_id(关联表B的产品ID,一个套件对应多条产品记录)
  • 表B(产品表):存储产品详情,比如product_id、product_name等字段

你的核心需求是遍历表A的每条记录,type为'P'时返回单个产品,type为'K'时返回套件下的所有产品,之前的查询没得到预期结果,大概率是关联逻辑没拆分清楚,下面给你两种可行的解决方案:

方案一:用UNION ALL拆分两种场景(推荐,逻辑清晰性能好)

把两种类型的查询分开写,再合并结果,这是最直观的方式:

-- 处理type='P'的情况:直接关联表B拿单个产品
SELECT
    a.id AS source_record_id,
    a.type,
    b.product_id,
    b.product_name -- 替换成你实际需要的产品字段
FROM
    表A a
INNER JOIN
    表B b ON a.target_id = b.product_id
WHERE
    a.type = 'P'

UNION ALL

-- 处理type='K'的情况:先关联表C拿套件下的所有产品ID,再关联表B拿产品详情
SELECT
    a.id AS source_record_id,
    a.type,
    b.product_id,
    b.product_name
FROM
    表A a
INNER JOIN
    表C c ON a.target_id = c.kit_id
INNER JOIN
    表B b ON c.product_id = b.product_id
WHERE
    a.type = 'K'

ORDER BY
    source_record_id;

为什么这个方案能解决问题?

  • 两种类型的关联逻辑完全分开,不会互相干扰
  • 用UNION ALL而不是UNION,因为两种场景的结果不会重复,UNION ALL的性能比UNION好很多(不需要去重)
  • 结果里会保留表A的原始记录ID,方便你对应到源数据

方案二:用LEFT JOIN保留表A所有记录(适合需要空结果的场景)

如果你的需求是即使表A的记录没有对应产品/套件(比如target_id无效)也要保留,可以用LEFT JOIN配合条件判断:

SELECT
    a.id AS source_record_id,
    a.type,
    -- 优先取P类型的产品,没有的话取K类型的
    COALESCE(b_p.product_id, b_k.product_id) AS product_id,
    COALESCE(b_p.product_name, b_k.product_name) AS product_name
FROM
    表A a
-- 仅当type='P'时关联表B
LEFT JOIN
    表B b_p ON a.type = 'P' AND a.target_id = b_p.product_id
-- 仅当type='K'时关联表C
LEFT JOIN
    表C c ON a.type = 'K' AND a.target_id = c.kit_id
-- 通过表C关联表B拿套件下的产品
LEFT JOIN
    表B b_k ON c.product_id = b_k.product_id
-- 可选:过滤掉没有对应产品的记录,如果不需要保留空结果就加这个条件
WHERE
    b_p.product_id IS NOT NULL OR b_k.product_id IS NOT NULL

ORDER BY
    source_record_id;

注意事项

  • 一定要确保表A的target_id在不同type下的关联对象是对的:P类型对应表B的产品ID,K类型对应表C的套件ID,这是关联的核心
  • 如果你的表字段名和我推断的不一样,比如表C的套件ID不是kit_id,直接替换成实际字段名就行
  • DB2 9.7.01完全支持这两种写法,兼容性没问题

如果你的当前查询有具体的错误或者表结构和我推断的不同,可以把代码贴出来,我再帮你细化调整~

内容的提问来源于stack exchange,提问作者a55embler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:52:26