仅当另一个表中没有记录时,才链接两个表以查找记录

时间:2017-04-05 13:25:15

标签: sql join sql-server-2012

我有两张桌子......

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

4 个答案:

答案 0 :(得分: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 )

答案 1 :(得分:1)

您需要将连接字段与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)

答案 2 :(得分:1)

请尝试以下答案:

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 :(得分:0)

这个问题被多次提出并回答:

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

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