MS Access LEFT JOIN 后空单元格意外填充固定值的问题排查与解决咨询
问题分析与解决方案
异常原因
你遇到的这个问题,核心在于Query1里的Category是固定的常量值,而非依赖Table1实际行数据的动态字段。
当执行左连接时,左表(Table2)的所有行都会被保留,右表(Query1)无匹配行时,关联字段会显示Null——但你的Category是硬编码的"NEW CATEGORY",这个值不依赖于Query1是否有匹配行,Access会直接把常量值填充到所有行,哪怕对应的Query1.ID是Null。
解决办法
有两种简单的方式可以修正,让无匹配行的Category显示为空:
方法1:在左连接查询中动态生成Category
不需要依赖Query1的硬编码字段,直接在主查询里判断是否有匹配行,再决定是否显示NEW CATEGORY:
SELECT [Table2].ID, [Query1].ID, IIf([Query1].ID Is Not Null, "NEW CATEGORY", Null) AS Category FROM [Table2] LEFT JOIN [Query1] ON ([Table2].ID = [Query1].ID)
这里用IIf函数判断:如果Query1的ID不为空(说明有匹配),就显示NEW CATEGORY,否则返回Null(即空单元格)。
方法2:修改Query1,让Category依赖Table1的行
把Query1里的常量改成和Table1字段绑定的表达式,这样左连接无匹配时,Category会自动变为Null:
-- 修改后的Query1 SELECT [Table1].ID, IIf([Table1].ID Is Not Null, "NEW CATEGORY", Null) AS Category FROM [Table1]
再执行原来的左连接查询,就能得到预期结果:第三行的Category会是空单元格。
验证结果
修改后执行查询,结果会变为:
| Table2.ID | Query1.ID | Category |
|---|---|---|
| 1 A | 1 A | NEW CATEGORY |
| 2 B | 2 B | NEW CATEGORY |
| 3 D | Null | (空单元格) |
内容的提问来源于stack exchange,提问作者the_mdfckn_d_o_double_g
相关产品推荐
相关产品推荐

