【问题标题】:Linking two tables to find a record only if there isn't a record in another table仅当另一个表中没有记录时才链接两个表以查找记录
【发布时间】:2017-08-31 03:36:31
【问题描述】:

我有两张桌子...

tbl1
ClientNo        ApptID          Status
1234            1               121
1234            2               121
1235            1               121
1235            2               121


tbl2
ClientNo        Valid         
1234            17 

我希望从 tbl1 中选择所有客户端 - 其中 ApptID = 2,并且 tbl2 中没有相应的记录。所以根据这个数据,1234在tbl2中有一条记录,就不需要在最终结果中显示了。

我很乐意看到最终结果:

ClientNo        ApptID          Status
1235            2               121

【问题讨论】:

    标签: sql join sql-server-2012


    【解决方案1】:

    您可以尝试以下查询:

    SELECT t1.*
    FROM tbl1 AS t1
    WHERE t1.ApptID = 2 AND  
          NOT EXISTS (SELECT 1
                      FROM tbl2 AS t2
                      WHERE t1.ClientNo = t2.ClientNo )
    

    【讨论】:

    • 你是第一个这样做的。谢谢。
    【解决方案2】:

    请尝试以下答案:

    SELECT * FROM TBL2 T2
    RIGHT JOIN
    (SELECT * FROM TBL1 WHERE ApptID = 2) TBL T1
    ON T2.ClientNo = T1.ClientNo 
    WHERE T2.ClientNo IS NOT NULL;
    

    【讨论】:

      【解决方案3】:

      你需要将join字段与NULL进行比较

      SELECT t1.* FROM tbl1 t1
         LEFT JOIN tbl_2 t2
         ON t1.ClientNo = t2.ClientNo 
         WHERE t1.ApptID=2 AND t2.ClientNo IS NULL
      

      或者使用子查询如下:

      SELECT * FROM tbl1
         WHERE ApptID=2 AND ClientNo NOT IN (SELECT ClientNo FROM tbl_2)
      

      【讨论】:

      • 在where'附近出现语法错误'关键字'WHERE'附近的语法不正确。'
      • 我已经更新了答案并添加了另一种方法
      【解决方案4】:

      这个问题被问了很多次:

      您需要加入第一个条件匹配和指定 失败 匹配的第二个条件:

      SELECT t1.ClientNo
        FROM tbl1 t1
        LEFT JOIN tbl2 t2 ON
          t1.ClientNo = t2.ClientNo
          AND t1.ClientNo IS NULL
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-06-14
        • 2014-06-26
        • 1970-01-01
        • 2010-12-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多