如何通过查询在特定列有值时人工生成新记录?
解决方案:用UNION ALL生成额外记录
完全可以通过SQL查询实现这个需求!核心思路是利用UNION ALL把原表的现有记录,和当Column3有值时生成的额外记录合并在一起,刚好能得到你想要的3条结果。
举个具体例子说明
假设你的表名为non_normalized_table,结构和原始数据如下:
| Column1 | Column2 | Column3 |
|---|---|---|
| 101 | Apple | Banana |
| 102 | Cherry | NULL |
我们需要把第一条记录里的Column3值(Banana)当作新的Column2值,生成一条额外记录。对应的SQL查询如下:
-- 第一步:获取原表的所有原始记录 SELECT Column1, Column2, Column3 FROM non_normalized_table UNION ALL -- 第二步:仅筛选Column3非空的行,生成以Column3为Column2的额外记录 SELECT Column1, Column3 AS Column2, NULL AS Column3 FROM non_normalized_table WHERE Column3 IS NOT NULL;
查询结果说明
执行这条SQL后,你会得到3条记录:
- 原有的两条原始记录
- 新增的一条记录:
Column1=101, Column2=Banana, Column3=NULL
关键注意事项
- 确保
UNION ALL前后两个查询的列数和数据类型完全匹配,否则会触发SQL语法错误 - 如果你的
Column3可能存在空字符串(而非NULL),需要把WHERE条件调整为:WHERE Column3 IS NOT NULL AND Column3 != '' - 优先使用
UNION ALL而非UNION,因为我们不需要去重(原记录和新增记录不会重复),这样查询效率会更高
内容的提问来源于stack exchange,提问作者Los Morales
相关产品推荐
相关产品推荐

