第一个查询用于从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
答案 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 JOIN
,LEFT OUTER JOIN
,RIGHT OUTER JOIN
都是更好的选择。