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

查询产品及关联供应商:UNION的更优使用方法

更优的SQL实现方案

你当前的示例SQL存在小错误,字段之间遗漏了逗号,基础正确写法为SELECT code, supplier_1 AS supplier_id FROM products,再拼接UNION。更适配多供应商字段场景的实现方案有以下几种:

方案1:使用UNPIVOT语法(支持SQL Server、Oracle、PostgreSQL 10+等主流数据库)

是最简洁的实现方式,不需要重复编写多次SELECT语句,仅需列出所有供应商字段即可,维护成本极低:

SELECT code, supplier_id
FROM products
UNPIVOT (
    supplier_id 
    FOR supplier_column IN (supplier_1, supplier_2, supplier_3, supplier_4, supplier_5)
) AS unpivoted_result
-- 若需过滤空的供应商关联,可补充下方条件
WHERE supplier_id IS NOT NULL;

方案2:使用VALUES行构造器(适配MySQL 8.0+、PostgreSQL、SQLite 3.39+等)

如果你的数据库不支持UNPIVOT语法,可以用该方案,比重复写UNION逻辑更易调整:

SELECT p.code, s.supplier_id
FROM products p
CROSS JOIN (
    VALUES 
        (p.supplier_1),
        (p.supplier_2),
        (p.supplier_3),
        (p.supplier_4),
        (p.supplier_5)
) AS s(supplier_id)
WHERE s.supplier_id IS NOT NULL;

旧数据库兼容优化方案

如果你只能用兼容所有老旧数据库的写法,可以把你原方案中的UNION改为UNION ALL,性能会有明显提升:

  • UNION会对合并后的全量结果做全局去重,额外消耗大量计算资源
  • 只要同一个产品下的供应商ID不存在重复,直接用UNION ALL即可,性能和上述两种方案几乎一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 11:30:01