数据库视图中嵌套视图的注意事项----知识点 ----有点狂

在创建视图的过程中,有时可能需要调用另一个视图,例如新建的视图为v2,调用一个存在的视图v1。如果v1中有很多列的存在,有的开发人员可能为了省事,就直接使用了v1.*。
比如说创建视图v2如下:

---假设v1要去关联的表为tableName
create view v2 as
select v1.*,column1,column2,column3
  from v1 left outer join tableName on v1.id=tableName.id

这会有一个隐藏的问题就是,如果视图v1中新增一列的情况下,这时视图v2里面就会发生列错位的情况,相当于column1 这个列其实读取的是新增列的那列数据,colunm2读取的是column1的列数据等等以此类推。

有读者可能问了,那把v1.*放到后面不就行了,如下的创建视图的sql

---假设v1要去关联的表为tableName
create view v2 as
select column1,column2,column3,v1.*
  from v1 left outer join tableName on v1.id=tableName.id

这样v1中新增列就不会发生读取数据的错误了,我想说这也是一种解决方案,v1中新增列也不会发生数据读取错误的情况。可是问题出现在v1中如果删除了一列,那么此视图就会发生错误,提示列不等的情况。

因此还是建议把v1中想查询的列给指明出来。如下:

---假设v1要去关联的表为tableName
create view v2 as
select column1,column2,column3,v1.column1,v2.column2,v3.column3
  from v1 left outer join tableName on v1.id=tableName.id
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值