Inner Join返回所有记录

时间:2014-12-08 23:15:22

标签: sql sql-server tsql

我有三张桌子

  1. tblVegetationClass(VegetationClassID是列名称)
  2. tblVegTypeVegFormationLink
  3. tblVegetationType
  4. 我有以下查询

    SELECT   dbo.tblVegetationType.VegTypeCode,  
        dbo.tblVegetationType.VegTypeName,dbo.tblVegetationClass.VegetationClassID,
        dbo.tblVegTypeVegFormationLink.VegetationFormationID
    FROM dbo.tblVegetationType 
        INNER JOIN dbo.tblVegTypeVegFormationLink
        ON dbo.tblVegetationType.VegTypeID = dbo.tblVegTypeVegFormationLink.VegTypeID
        INNER JOIN dbo.tblVegetationClass
        ON dbo.tblVegetationType.VegetationClassID=dbo.tblVegetationClass.VegetationClassID
        INNER JOIN tblCMAVegTypeLink 
        ON dbo.tblVegetationType.VegTypeID = dbo.tblCMAVegTypeLink.VegTypeID
    WHERE   dbo.tblVegetationType.PercentageCleared >= 50 
        AND dbo.tblVegTypeVegFormationLink.VegetationFormationID = 313
        AND dbo.tblCMAVegTypeLink.CMAID = 4 
        AND (dbo.tblVegetationType.EffectiveDateTo IS NULL)
    

    查询返回

    VegTypeCode VegTypeName VegetationClassID   VegetationFormationID
    HU532       Coastal     40                   313
    HU591       Paperbark   39                   313
    HU633       Swamp       39                   313
    HU635       Swamp       40                   313
    

    enter image description here

    我希望查询只返回记录2和3或1和4。

      

    内部联接不匹配   tblVegetationType.VegetationClassID = tblVegetetationClass.VegetationClassID

    你能否在我的查询中纠正我的错误?

1 个答案:

答案 0 :(得分:2)

您的WHERE子句不以任何方式约束tblVegetationClass,因此它将允许所有此类记录通过。如果你要添加

AND dbo.tblVegetationClass.ID = 1

(或沿着这些行的东西)你将限制查询返回的植被类。