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

MySQL如何对比单行两列值,不同时生成新行?

当然可以实现!这里有两种适合MySQL的解决方案,完美匹配你的需求:

方案1:用UNION DISTINCT自动去重(最简单)

这种方法逻辑直观,直接分别查询uom和uom1对应的行,再用UNION DISTINCT合并结果——它会自动剔除重复的行,刚好满足你的要求:

SELECT id, item_id, uom FROM your_table_name
UNION DISTINCT
SELECT id, item_id, uom1 FROM your_table_name;

效果说明

  • 当uom和uom1值不同时:两个查询的结果无重复,最终返回两行
  • 当uom和uom1值相同时:两个查询的结果完全重复,UNION DISTINCT会合并成一行
方案2:用UNION ALL加条件过滤(性能更优)

如果你的表数据量较大,UNION DISTINCT的去重操作会带来额外性能开销,推荐用这种方式——只在uom和uom1不同时才返回uom1的行,避免不必要的重复处理:

SELECT id, item_id, uom FROM your_table_name
UNION ALL
SELECT id, item_id, uom1 FROM your_table_name
WHERE uom <> uom1;

效果说明

  • 第一部分查询始终返回uom对应的行
  • 第二部分查询仅在uom≠uom1时才返回uom1对应的行,既满足需求又减少了数据处理量

测试验证

假设你的表名为product_units:

  1. 当表数据为:
id | item_id | uom | uom1
1  | 1       | kg  | box

执行SQL后得到结果:

id | item_id | uom
1  | 1       | kg
1  | 1       | box
  1. 当表数据为:
id | item_id | uom | uom1
1  | 1       | kg  | kg

执行SQL后得到结果:

id | item_id | uom
1  | 1       | kg

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:18:54