一尘不染

如何从右表中找不到的左表返回行?

sql

我有两个具有相似列名的表,我需要从左表返回在右表中找不到的记录?我有一个主键(列),它将帮助我比较两个表。首选哪种连接?


阅读 122

收藏
2021-03-17

共1个答案

一尘不染

如果您要使用T-SQL,请先了解基础知识。这里有三种类型的联接,每种联接都有自己的一组逻辑处理阶段,分别是:

  1. Across join是最简单的。它仅实现一个逻辑查询处理阶段a Cartesian Product。此阶段在作为连接输入提供的两个表上进行操作,并产生两个表的笛卡尔积。即,来自一个输入的每一行都与来自另一输入的所有行匹配。因此,如果您在一个表中有m行,而在另一表中有n行,那么结果中将得到m脳n行。
  2. 然后是Inner joins:它们应用两个逻辑查询处理阶段:A Cartesian product在两个输入表之间(如在交叉连接中一样),然后filters根据您在inON子句中指定的谓词(也称为Join condition)进行行操作。
  3. 接下来是第三种连接类型Outer Joins

outer join你标记表作为preserved使用关键字表格LEFT OUTER JOINRIGHT OUTER JOINFULL OUTER JOIN之间的表名。该OUTER关键字optional。的LEFT关键字意味着的行left table被保留; 的RIGHT关键字的装置,在各行right table被保留;
FULL关键字的意思是,行bothleft,并right表将被保留。

的第三个逻辑查询处理阶段outer join基于ON谓词识别保留表中未在其他表中找到匹配项的行。此阶段将这些行添加到连接的前两个阶段所生成的结果表中,并NULL在这些外部行中使用标记作为占位符,表示来自连接的未保留端的属性。

现在,如果我们看一个问题:要从左表中返回在右表中找不到的记录,请使用Left outer join并筛选出NULL连接右侧具有属性值的行。

2021-03-17