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:
- 当表数据为:
id | item_id | uom | uom1 1 | 1 | kg | box
执行SQL后得到结果:
id | item_id | uom 1 | 1 | kg 1 | 1 | box
- 当表数据为:
id | item_id | uom | uom1 1 | 1 | kg | kg
执行SQL后得到结果:
id | item_id | uom 1 | 1 | kg
内容的提问来源于stack exchange,提问作者Crazy
相关产品推荐
相关产品推荐

