【发布时间】:2019-12-10 21:28:02
【问题描述】:
我在 SQL Server 2017 中遇到了关于视图的问题。
我正在对后面有多个基础表的视图运行查询。除了SELECT子句中涉及的表之外,其他表也被SQL Server逻辑读取,我想知道为什么。
这里是场景:
/*******************************************************/
CREATE VIEW v_test
AS
SELECT
a.col1,
a.col2,
b.col3,
b.col4,
c.col5,
c.col6,
d.col7,
d.col8,
e.col9,
e.col10,
f.col11,
f.col12,
g.col13,
g.col14
FROM a
LEFT JOIN b
LEFT JOIN c
LEFT JOIN d
LEFT JOIN e
LEFT JOIN f
LEFT JOIN g
/*********************************************************/
SELECT col1, col2
FROM V_test
- col1 col2 只能从 tbl_a 中取出。=>意思是,逻辑读取应该只读取表 a。
- 但是,逻辑读取结果是读取的表比 tbl_a 多。在我得到的一个场景中,它读取 tbl_a 到 tbl_g。
这是为什么?
【问题讨论】:
-
当然它会读取其他表。它需要根据连接谓词知道是否有任何行被删除或重复。
标签: sql-server join view