SQL表自内连接创建视图及新增is_subsector字段修改问题
问题错误点梳理
- 视图修改逻辑错误:不允许在
ALTER VIEW的查询语句中引用正在修改的视图本身,会触发递归引用报错,必须基于原始表res_business_sector重新编写完整的视图查询逻辑。 - 判断规则写反:需求规定
parent_id不为空时is_subsector取值为1,原语句写的是parent_id IS NULL THEN 1,逻辑完全相反。 - 字段类型不匹配:CASE语句默认返回整型值,需要显式转换为bit类型才能满足字段类型要求。
正确实现代码
ALTER VIEW v_res_business_sector AS SELECT rb1.id, rb1.create_uid, rb1.write_uid, rb1.create_date, rb1.write_date, rb1.name, rb1.active, rb1.parent_id, rb1.Code, CAST(CASE WHEN rb1.parent_id IS NOT NULL THEN 1 ELSE 0 END AS BIT) AS is_subsector FROM res_business_sector AS rb1 INNER JOIN res_business_sector AS rb2 ON rb1.parent_id = rb2.id
补充提示
当前视图使用的是自内连接逻辑,关联条件为rb1.parent_id = rb2.id,意味着所有返回的记录parent_id必然非空,is_subsector字段的值会全为1。如果后续需要保留没有父级的顶级行业数据,可以把INNER JOIN修改为LEFT JOIN即可。
内容的提问来源于stack exchange,提问作者xristos ratsas
相关产品推荐
相关产品推荐

