SQL SERVER如何分解视图代码并选择正确的表进行提取?

问题描述 投票:-2回答:1

我在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
1个回答
0
投票

根据所有联接条件,表A中的行可能会被消除或重复。因此,在大多数情况下,要知道应返回多少行,所有连接条件都必须进行评估。

© www.soinside.com 2019 - 2024. All rights reserved.