将INNER JOIN添加到查询中不应该增加返回的行数吗?

时间:2010-08-18 07:32:14

标签: sql sql-server tsql inner-join

我有一个像下面这样的查询,返回我期望的正确行数。 (它必须匹配类似的查询,该查询返回相同的数据集,但具有与其他相关表不同的关联信息。

SELECT *
FROM LK
INNER JOIN STC ON LK.V = STC.VI
LEFT OUTER JOIN BC ON LK.BC = BC.ID
LEFT OUTER JOIN K AS LT ON ISNULL(BC.ZA, LK.VH) = LT.KNN
WHERE
    LT.KI IS NOT NULL AND LT.KS = 0
  OR 
    LT.KI IS NULL 
ORDER BY
  LK.Z

但是一旦我添加其他内部联接,我实际上会获得更多行。我认为内连接只在连接的两边找到信息时返回行,所以我希望得到相同或更少的行。但我的两倍左右。

例如:

SELECT *
FROM LK
INNER JOIN STC ON LK.V = STC.VI

INNER JOIN VK ON LK.V = VK.ID
INNER JOIN K AS A ON VK.AIN = A.KNN

LEFT OUTER JOIN BC ON LK.BC = BC.ID
LEFT OUTER JOIN K AS LT ON ISNULL(BC.ZA, LK.VH) = LT.KNN
WHERE
    LT.KI IS NOT NULL AND LT.KS = 0
  OR 
    LT.KI IS NULL 
ORDER BY
  LK.Z

这有意义吗?如何再添加两个内部联接会导致返回更多行?

更重要的是我的实际问题,我如何调整第二个查询,以便返回与第一个查询相同的行,但是使用连接表中的额外列?

1 个答案:

答案 0 :(得分:15)

如果每个LK有多个VK,那么它将增加行数。我不明白你的架构足以解决它。