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

Posted

技术标签:

【中文标题】仅当另一个表中没有记录时才链接两个表以查找记录【英文标题】: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

【问题讨论】:

【参考方案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】:

这个问题被问了很多次:

https://***.com/a/5840232/1334425 https://***.com/a/4076157/1334425 https://***.com/a/6528786/1334425 https://***.com/a/6613752/1334425 https://***.com/a/6601945/1334425

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

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

【讨论】:

以上是关于仅当另一个表中没有记录时才链接两个表以查找记录的主要内容,如果未能解决你的问题,请参考以下文章

仅当前面有 (\d2 -) 时才在 html 中查找链接 (href) [重复]

仅当记录不存在时才将 SQL 插入表中[重复]

仅当记录通过数据修改而更新时才更新日期

PL/SQL - 仅当记录不存在时才插入记录

连接sql表以选择连接表中不存在的记录[重复]

仅当表中不存在两个 id 的组合时才将值插入表中