【问题标题】:Using WHERE <> in LEFT JOIN criteria在 LEFT JOIN 条件中使用 WHERE <>
【发布时间】:2015-02-23 23:53:52
【问题描述】:

我正在尝试找出是否可以在 Left JOIN ON 条件上使用 WHERE &lt;&gt;。我希望这是有道理的。

这是脚本:

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 &lt;&gt; A.Account_Number__c 的记录列表。

【问题讨论】:

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


    【解决方案1】:

    我不太明白你想要完成什么,你能详细说明一下吗?

    您的左连接声明在 slxTELEMAGICID 和 account_number__c 上连接它们,但在您的 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
           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 并且当它们不相等时,那就是一切,是吗? (可能保存空值)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多