sql-server - SQL Server 如何分解视图代码并选择要提取的正确表?
问题描述
我在 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。
为什么是这样?
解决方案
It is possible that rows from table A get eliminated or duplicated depending on all join conditions.
So to know how many rows should be returned all join conditions has to be evaluated in most cases.
推荐阅读
- reactjs - 使用 react-table 将当前日期的行显示为最高结果
- python - 如何在不关闭的情况下运行 python 多处理池
- java - 按钮分享错误的网址
- pandas - 为不同的csv问题绘制图表
- javascript - 如何比较两个日期是否更接近
- android - React Native 视图不起作用,如果语句
- javascript - Javascript:将字符添加到包含特定单词的字符串
- sql - 如何通过加入 2 个单独的表来更新临时表的列?
- python - VBA - 设置为“主题颜色”时无法从word文档中检索阴影颜色
- php - 如何在没有循环的情况下在 foreach CI 中创建多数组