SQL LEFT JOIN查询未返回预期结果 预算列值错位问题排查
SQL关联查询结果异常问题
涉及表结构
现有两张业务数据表结构及测试数据如下:
CATEGORIES表: id | name | category_group | cate_type_id 1 | Entertainment | Entertainment | 1 2 | Electricity | Utilities | 8 3 | Water | Utilities | 8 4 | Rent | Living Exp | 6 5 | credit card | Finance | 5 BUDGET-ITEMS表: id | budget_id | cat_id | category_group| budget_yr | budget_01 | budget_02 | ... | budget_12 1 | 1 | 1 | Entertainment | 2022 | 500 | | 2 | 1 | 2 | Utilities | 2022 | 1500 | | 3 | 1 | 3 | Utilities | 2022 | | 250 |
使用的查询语句
需求为查询CATEGORIES表所有符合条件的条目,关联匹配对应的预算项数据,编写的SQL如下:
SELECT c.id as base_id,c.name,c.category_type_id, c.category_group as base_group, b.* FROM category c LEFT JOIN budget_items b ON c.id = b.category_id WHERE c.category_type_id NOT IN (5) ORDER BY c.category_type_id, c.category_group ASC
预期与实际结果对比
- 预期输出:所有分类(排除信用卡分类)正确关联对应月份的预算值,电费1月预算1500、水费2月预算250,无预算的房租分类返回空预算值
id | budget_id | cat_id | catgroup | budget_yr | budget_01 | budget_02 | ... | budget_12 1 | 1 | 1 | Entertainment | 2022 | 500 | | 2 | 1 | 2 | Utilities | 2022 | 1500 | | 3 | 1 | 3 | Utilities | 2022 | | 250 | 4 | 1 | 4 | Living Exp | 2022 | | |
- 实际输出:左表分类数据返回正确,但预算值列匹配错位,电费的1500出现在2月预算列,水费无对应预算值
id | budget_id | cat_id | catgroup | budget_yr | budget_01 | budget_02 | ... | budget_12 1 | 1 | 1 | Entertainment | 2022 | 500 | | 2 | 1 | 2 | Utilities | 2022 | | 1500 | 3 | 1 | 3 | Utilities | 2022 | | | 4 | 1 | 4 | Living Exp | 2022 | | |
补充说明:为节省篇幅截断了返回结果中base_前缀的分类相关列,核心异常为预算值与月份列的对应关系错误。
最终排查结论
经最终定位,所编写的JOIN查询语句逻辑无问题、运行正常,异常结果由底层存储的源数据本身错误导致。
内容的提问来源于stack exchange,提问作者Ravi
相关产品推荐
相关产品推荐

