带有联接的SQL查询,这些联接不会在返回更多行的位置使用

时间:2014-10-24 12:56:11

标签: sql tsql stored-procedures join sql-server-2012

我正在从一名前雇员处理SQL Server 2012中的存储过程,如下所示:

SELECT 
    t1.colx, t1.coly, t2.colz
FROM 
    table1 t1
INNER JOIN 
    table2 t2 ON t2.col2 = t1.col2
INNER JOIN 
    table3 t3 ON t3.col3 = t2.col3
INNER JOIN 
    table4 t4 ON t4.col4 = t3.col4
INNER JOIN 
    table5 t5 ON t5.col5 = t4.col5
WHERE 
    t1.col6 = 1 AND t2.col7 = 2 

有几件我无法理解的事情:

  1. table4条款中未使用table5WHERE时,加入SELECTSELECT有什么意义?它如何使查询受益?它们也未在JOIN中使用。

  2. 当我从查询中删除最后2个连接时,JOIN返回的记录数量减少。包含最后2 table1后,它会返回更多记录。那是怎么回事?如果在table2INNER JOIN之间共有500条记录,那么首先table1介于table2JOIN之间以及所有其他{{1}} s,为什么最后两个{{1}}会导致查询返回更多记录?

  3. 感谢。

1 个答案:

答案 0 :(得分:3)

1)这迫使表5中有相应的记录。如果记录不在表5中,则数据不会显示。

2)这是因为table4和/或table5有多个连接的行。这就是为什么你在连接中获得的记录多于没有连接的原因。