通过匹配ID从另一表添加Supplier列失败,求SQL修正方案
修正后的SQL代码及问题说明
原代码的问题
LEFT JOIN的ON子句不完整:只写了a.ID,没有关联output_table的ID字段,数据库无法确定匹配规则。WHERE子句中a.period = 2022会破坏左连接逻辑:左连接原本会保留output_table的所有行,即使main_table中没有匹配项,但这个条件会过滤掉所有main_table中无匹配(a.period为NULL)的行,等同于变成内连接。- 未指定
value、product、name的表来源:如果两张表存在同名字段,会引发歧义错误,即使没有同名字段,也不符合SQL编写规范。
修正后的代码
select o.ID, o.value, o.product, o.name, a.supplier from output_table o -- 给主表起别名o,方便引用 left join main_table a on a.ID = o.ID -- 完整指定ID匹配规则 and a.period = 2022 -- 将period条件移到ON子句,保留左连接逻辑 order by o.product
关键修改说明
- 给
output_table添加别名o,明确字段来源,避免歧义。 - 补全
LEFT JOIN的ON子句,指定a.ID = o.ID作为匹配依据。 - 将
a.period = 2022从WHERE移到ON子句:这样只会在匹配main_table时筛选2022年的数据,同时保留output_table中所有未匹配的行(这些行的supplier会显示为NULL)。如果你的需求是只保留output_table中匹配到main_table2022年数据的行,可以把条件放回WHERE,但此时左连接失去意义,换成INNER JOIN更合适。
内容的提问来源于stack exchange,提问作者mandu J.
相关产品推荐
相关产品推荐

