使用WHERE<>在LEFT JOIN标准中

时间:2015-02-23 23:53:52

标签: sql sql-server tsql left-join where-clause

我试图找出是否可以在Left JOIN ON条件上使用WHERE <>。我希望这是有道理的。

这是脚本:

SELECT DISTINCT
      SLA.slxTELEMAGICID,
      sfAccount_Number__c = A.Account_Number__c,
      SLA.slxACCOUNTID,
      sfId = A.Id
      INTO #sfEXACTIVEACCOUNTS
        FROM #slxACTIVEACCOUNTS SLA
              LEFT JOIN ACCOUNT A
                ON SLA.slxTELEMAGICID = A.Account_Number__c
                WHERE SLA.slxTELEMAGICID is NULL OR SLA.slxTELEMAGICID ='N' OR SLA.slxTELEMAGICID <> A.Account_Number__c
                ORDER BY SLA.slxTELEMAGICID, A.Account_Number__c

上述脚本的问题在于它似乎没有提取SLA.slxTELEMAGICID <> A.Account_Number__c的记录列表。

1 个答案:

答案 0 :(得分:2)

我不太明白你想要完成的事情,你能详细说明吗?

您的左连接是在slxTELEMAGICIDaccount_number__c上声明加入他们,但在您的where子句中,您还可以检索您在join子句中加入的两个记录不匹配 - 除非这个条件不会被满足,因为它们已经被连接过滤掉了。

您的加入条件本身在联接中可以有多个条件,例如:

SELECT DISTINCT
      SLA.slxTELEMAGICID,
      sfAccount_Number__c = A.Account_Number__c,
      SLA.slxACCOUNTID,
      sfId = A.Id
  INTO #sfEXACTIVEACCOUNTS
  FROM #slxACTIVEACCOUNTS SLA
  LEFT JOIN ACCOUNT A ON SLA.slxTELEMAGICID = A.Account_Number__c
       OR SLA.slxTELEMAGICID is NULL 
       OR SLA.slxTELEMAGICID ='N' 
       OR SLA.slxTELEMAGICID <> A.Account_Number__c
  ORDER BY SLA.slxTELEMAGICID, A.Account_Number__c

虽然这看起来真的会让所有行都归还吗?如果你加入slxTELEMAGICID = account_number__c的地方以及他们不相等的地方,那么这一切都是吗? (保存可能为空)