SQL使用UNION操作合并两张表时Category列全为NULL问题咨询
正确SQL写法
你需要的是纵向堆叠两张表的所有非重复行,显式指定列顺序做UNION即可:
SELECT Folder, Categeory, Subcategory, `Count` FROM TableA UNION SELECT Folder, Categeory, Subcategory, `Count` FROM TableB ORDER BY Folder, Subcategory;
说明:
Count属于SQL保留关键字,用反引号包裹避免语法报错- 如果确认两张表不存在完全相同的行,可以把
UNION替换为UNION ALL,跳过去重步骤提升执行效率- 末尾的
ORDER BY是为了输出顺序和样例一致,不需要可删除
之前操作的错误原因
- 误用
FULL JOIN:FULL JOIN是横向关联两张表生成宽表的语法,会将相同Folder的Table A、Table B行拼接为同一行,完全不符合纵向堆叠行的需求,自然会产生大量逻辑异常的空值。 UNION写法不规范:你使用了SELECT *自动匹配列,若两张表建表时的物理列存储顺序不一致,会出现列错位问题,比如把Table B的Subcategory值匹配到Categeory列位置,最终出现所有行Categeory都为NULL的异常,手动显式指定列的顺序即可解决。
内容的提问来源于stack exchange,提问作者Blackdynomite
相关产品推荐
相关产品推荐

