Sql 从一个表中获取不在另一个表中的值

Sql 从一个表中获取不在另一个表中的值,sql,select,inner-join,Sql,Select,Inner Join,第一个查询用于从t1中获取不在t2中的值 select t1.* from table1 t1 where t1.id = '1' and t1.id2 not in (select t2.id2 from table2 t2 where t2.id='1') 但是如何使用这种格式而不是内部选择来做同样的事情呢 select t1.* from table1 t1, table2 t2 where t1.id = '1' and t2.id = t1.id and t1.id2 != t2.i

第一个查询用于从t1中获取不在t2中的值

select t1.*
from table1 t1
where t1.id = '1'
and t1.id2 not in (select t2.id2 from table2 t2 where t2.id='1')
但是如何使用这种格式而不是内部选择来做同样的事情呢

select t1.*
from table1 t1, table2 t2
where t1.id = '1'
and t2.id = t1.id
and t1.id2 != t2.id2

可以使用左外连接:

select t1.*
from table1 t1
   LEFT OUTER JOIN table2 t2
      ON t1.id = t2.id
WHERE t2.id IS NULL
LEFT-OUTER-JOIN
表示从最左边的表(
table1
此处)中获取所有结果,并且仅从您的联接表(
table2
此处)中获取与
ON
条件匹配的结果。通过在
WHERE
子句中过滤以删除
table2.id
为空的任何结果,您实际上只留下与
T2
不匹配的
T1
结果


另外,请尽量远离表1、表2的
隐式联接类型。这是非常古老的学校<代码>内部联接
左外部联接
右外部联接
几乎适用于任何情况。

我喜欢这种语法。我花了20年的时间才弄明白,如果真的学究气十足,添加DISTINCT会复制NOTIN@Error_2646没有跟上。我这里没有
不在
中,OP的第一个查询中的
不在
中不能替换为
不同的
。什么是“使用此格式的相同事物”呢?这也是一个常见问题,你所要做的就是谷歌你的标题。请阅读向下投票箭头鼠标悬停文本(&D)。可能重复