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

SQL合并同列名不同数据的两张表:Join无结果问题排查

数据表合并问题排查与正确实现

问题说明

需合并两个结构完全一致(42个相同列名)但数据不同的表,最终结果要包含两张表的所有数据行。当前使用FULL OUTER JOIN的SQL执行后无返回行,但单独查询两张表均有结果,需排查问题并给出正确方案。

现有代码问题分析

  1. 错误使用关联查询而非行合并:FULL OUTER JOIN是按关联键匹配两张表的行,并非合并所有行,和需求完全不符。
  2. WHERE条件导致无结果:FULL JOIN后,当某张表无匹配行时,对应字段会为NULL,但现有WHERE条件同时要求b.column2 like '%ff%'、a.column2 like '%ff%'等涉及两张表的非空条件,只要任意一侧无匹配行,条件就不满足,最终返回空集。
  3. 列选择错误:现有SELECT同时选取b和a的所有列,会生成84列的结果,和目标的42列合并结果不符。

正确实现方案

由于两张表结构完全一致,应使用UNION ALL(保留所有行,包括重复)或UNION(自动去重)来合并行,同时将各自的过滤条件放在对应的子查询中:

修改后的代码

# directory where report results will be saved
report_result = r"path\report_result_%s.csv"%today
report_result_sql_query ="""
SELECT column1, column2, column3, ..., column42
FROM table1
WHERE column2 like '%ff%' AND column5 >= '{}'
UNION ALL
SELECT column1, column2, column3, ..., column42
FROM table2
WHERE (column3 is null or column3= '0' or column3= ' ') AND column2 like '%ff%' AND column5 >= '{}'
""".format(day, yyday)
print(report_result_sql_query)
report_result_colour = web_service(report_result_sql_query)
print(report_result_colour.shape)
report_result_colour.to_csv(report_result, index=False)

方案说明

  • UNION ALL:直接合并两张表的查询结果,保留所有行,性能比UNION更高(无需去重),符合需求中的“包含两张表所有数据行”。
  • 子查询过滤:将针对table1和table2的过滤条件分别放在各自的FROM子句后,确保只筛选出符合条件的行再合并。
  • 列一致性:两张表的SELECT列完全一致,保证合并后的结果列数和结构与原表一致。

示例验证

对应你提供的示例表:

  • DT1和DT2结构一致,使用UNION ALL合并后,会直接将DT1的所有行和DT2的所有行拼接,得到你期望的DT Result。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 12:01:43