SQL Server左连接行为

时间:2017-09-22 15:12:00

标签: sql-server left-join

我遇到左连接问题。每次我认为我理解他们时,我遇到了一个问题。在以下查询中,我只是尝试返回PracticeTypeName ='Facility'的记录。我知道在表A和表B中都存在PracticeTypeID的13328和502,因此在这个实例中不应该有任何NULL值。 PracticeTypeID = 502是PracticeTypeName ='Billing',因此不应返回。我正在使用左连接来说明ID不匹配的其他情况。

    Select Memberid, locationname, practicetypeid, practicetypename
    From A
    Left Join B
    On A.PracticeTypeId = B.PracticeTypeID
    And A.PracticeTypeName = 'Facility'

此查询返回以下结果

    MemberID     LocationName     PracticeTypeID    PracticeTypeName
    10            UHC                13328               Facility
    10            TV                  502                NULL

但是如果改为使用此查询:

    Select Memberid, locationname, practicetypeid, practicetypename
    From A
    Left Join B
    On A.PracticeTypeId = B.PracticeTypeID
    Where A.PracticeTypeName = 'Facility'

我得到以下结果,这是我正在寻找的:

    MemberID     LocationName     PracticeTypeID    PracticeTypeName
    10            UHC                13328               Facility

我认为使用左连接会使用以下内容,否则左连接只会成为内部连接。

   On A.PracticeTypeId = B.PracticeTypeID
   And A.PracticeTypeName = 'Facility'

为什么这个左连接与我认为左连接应该做的相反?

1 个答案:

答案 0 :(得分:2)

WHERE子句将过滤整个结果集,而将条件添加到JOIN只会加入这些行。由于它是LEFT JOIN,因此将条件放在JOIN子句中仍将返回没有匹配的行,对于连接表的列,返回NULL。

WHERE查看您的结果并说“哪些行具有工具?”,并返回这些。