我有两个具有相似列名称的表,我需要从左表中返回在右表中找不到的记录?我有一个主键(列),这将帮助我比较两个表.哪个加入是首选?
解决方法
如果您要求T-sql,那么首先要看基本面.这里有三种类型的连接,它们具有自己的一组逻辑处理阶段:
>交叉连接是最简单的.它只实现了一个逻辑查询处理阶段 – 一个笛卡尔乘积.这个阶段是作为连接的输入提供的两个表,并且产生了两者的笛卡尔乘积.也就是说,来自一个输入的每一行与来自另一个的所有行匹配.所以如果一个表中有m行,另一个表中有n行,则在结果中得到m×n行.
>然后是内连接:它们应用两个逻辑查询处理阶段:两个输入表之间的笛卡尔乘积,如交叉连接,然后根据您在ON子句中指定的谓词(也称为连接条件)来过滤行,.
>接下来是第三种连接外连接:
在外部连接中,通过在表名之间使用关键字LEFT OUTER JOIN,RIGHT OUTER JOIN或FULL OUTER JOIN将表标记为保留表. OUTER关键字是可选的.LEFT关键字意味着左表的行被保留; RIGHT关键字意味着右表中的行被保留;并且FULL关键字意味着保留左表和右表中的行.外连接的第三个逻辑查询处理阶段基于ON谓词标识未在其他表中找到匹配的保留表中的行.此阶段将这些行添加到由连接的前两个阶段生成的结果表中,并将NULL标记用作来自这些外部行中的连接的非保留端的属性的占位符.
现在我们来看一下这个问题:要从左表中返回在右表中找不到的记录,请使用左外连接,并从连接右侧过滤出属性值为NULL的行.