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

时间:2018-05-31 19:28:36

标签: 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.id2

1 个答案:

答案 0 :(得分:2)

您可以使用LEFT OUTER JOIN:

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为空的任何结果,您实际上只会留下与T1无法匹配的T2结果。

还要尽量远离FROM table1, table2类型的隐式联接。这是一所非常古老的学校。几乎在任何情况下,INNER JOINLEFT OUTER JOINRIGHT OUTER JOIN都是更好的选择。