请教关于视图的两个初级问题
1.如果连接两个基表,比如:
select a.*,b.*
from a inner join b on (a.id=b.id)
不行, 必须要加上 top n 呢?比如:
select top 100 a.*,b.*
from a inner join b on (a.id=b.id)我不知为何不加top就报错,是我的问题,还是规定就是这样吗?
不明白为什么有这个规定?2.更新视图时,如果视图是由多个基表组成的,当删除视图中的记录时,是删除哪个基表中的呢?
是不是删除所以基表中的记录呢?
我的测试结果是,全删除了,我不解,总该有个规则吧,可是规则是什么呢?
1.如果连接两个基表,比如:
select a.*,b.*
from a inner join b on (a.id=b.id)
不行, 必须要加上 top n 呢?比如:
select top 100 a.*,b.*
from a inner join b on (a.id=b.id)我不知为何不加top就报错,是我的问题,还是规定就是这样吗?
不明白为什么有这个规定?2.更新视图时,如果视图是由多个基表组成的,当删除视图中的记录时,是删除哪个基表中的呢?
是不是删除所以基表中的记录呢?
我的测试结果是,全删除了,我不解,总该有个规则吧,可是规则是什么呢?
order by
语句时,必须要 select top n 才行呀,不行您可以试试。
SELECT子句中的目标列不能包含聚集函数。 SELECT子句中不能使用DISTINCT关键字。 不能包括GROUP BY子句。 不能包括经算术表达式计算出来的列。 视图必须是基于单表的,即由单个基本表使用选择、投影操作导出,并且要包含了基本表的主
1.如果连接两个基表,比如:
select a.*,b.*
from a inner join b on (a.id=b.id)
不行, 必须要加上 top n 呢?比如:
select top 100 a.*,b.*
from a inner join b on (a.id=b.id)我不知为何不加top就报错,是我的问题,还是规定就是这样吗?
不明白为什么有这个规定?---------
不用,直接这样即可.除非是你自己语句有问题.
select a.*,b.* from a inner join b on a.id=b.id
2.更新视图时,如果视图是由多个基表组成的,当删除视图中的记录时,是删除哪个基表中的呢?
是不是删除所以基表中的记录呢?
我的测试结果是,全删除了,我不解,总该有个规则吧,可是规则是什么呢?
---------
你不需要更新视图,只需要更新你所说的基表的数据.
因为视图是建立在表的基础上的.表的数据变化则影响视图的变化.
SELECT * FROM (
SELECT * FROM TB ORDER BY ID
) T
你在括号里加的ORDER BY是没有任何意义的,所以SQL会报错,但如果你在前边加上了TOP XXX,ORDER BY就变成了筛选的依据,就不会报错。明白了没?
必须使用Top
-----------------
TOP PERCENT 100 表示抽出全部数据
我是说,视图中如果有
order by 的话,就必须加上
select top n
我不知这是为什么?
不允许更新⑵ 若视图的字段来自字段表达式或常数,不允许
对此视图执行INSERT和UPDATE操作, 但是
允许执行DELETE操作
⑶ 若视图的字段来自集函数,则此视图不允许更新⑷ 若视图定义中含有GROUP BY子句,则此视图不
允许更新⑸ 若视图定义中含有DISTINCT短语, 则此视图不
允许更新
⑹ 若视图定义中含有嵌套查询,并且内层查询的
FROM子句涉及的表也是导出该视图的基本表,
则此视图不允许更新⑺ 一个不允许更新的视图上定义的视图也不允许
更新
请看http://blog.csdn.net/feixianxxx/archive/2009/11/11/4798287.aspx
还是看http://blog.csdn.net/feixianxxx/archive/2009/11/11/4798287.aspx