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

MySQL中两表UNION后如何获取指定Id对应的最低价格记录

跨表查询Id=123对应最低价格记录方案

之前写法的问题说明

  • 第一次单表查询错误:子查询取的是全表最低价格,没有过滤Id="123"条件,所以全表最低价格对应的Id不是123时就查不到结果
  • 后续GROUP BY写法错误:按Name分组计算的是每个Name对应的最低价格,不是所有Id=123记录的全局最低价格,返回结果不符合需求

通用实现代码

所有主流数据库都兼容的子查询写法:

SELECT DISTINCT Name, Price 
FROM (
  SELECT Name, Id, Price FROM A 
  UNION 
  SELECT Name, Id, Price FROM B
) AS combined_table
WHERE Id = "123" 
AND Price = (
  SELECT MIN(Price) 
  FROM (
    SELECT Name, Id, Price FROM A 
    UNION 
    SELECT Name, Id, Price FROM B
  ) AS combined_table
  WHERE Id = "123"
);

如果使用支持CTE语法的数据库(MySQL 8.0+、PostgreSQL、SQL Server等),可以用更简洁的写法:

WITH combined_table AS (
  SELECT Name, Id, Price FROM A 
  UNION 
  SELECT Name, Id, Price FROM B
)
SELECT DISTINCT Name, Price 
FROM combined_table
WHERE Id = "123"
AND Price = (SELECT MIN(Price) FROM combined_table WHERE Id = "123");

补充说明

  • 现有逻辑使用UNION会自动去除两张表中完全重复的行,外层加DISTINCT是保证相同Name和Price的记录只返回一条,和你给出的预期结果一致
  • 如果需要保留所有重复的最低价格记录,把UNION改成UNION ALL,同时去掉外层的DISTINCT关键字即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 11:33:02