代码之家  ›  专栏  ›  技术社区  ›  Kurt

向查询添加内部联接不应增加返回的行数,对吗?

  •  10
  • Kurt  · 技术社区  · 14 年前

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

    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 回复  |  直到 14 年前
        1
  •  15
  •   tenfour    14 年前

    如果每个Lk有多个VK,那么它将增加行数。但我对你的模式理解不够,无法修复它。