【问题标题】:Get values from one table that are not in another从一个表中获取不在另一个表中的值
【发布时间】:2023-03-12 23:47:01
【问题描述】:

第一个查询用于从 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

【问题讨论】:

标签: sql select inner-join


【解决方案1】:

您可以使用左外连接:

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

也尽量远离FROM table1, table2 类型的隐式连接。这是非常古老的学校。 INNER JOINLEFT OUTER JOINRIGHT OUTER JOIN 几乎适用于任何情况。

【讨论】:

  • 我喜欢这种语法。我花了 20 年的时间才弄明白。
  • 对它非常迂腐,添加 DISTINCT 会复制 NOT IN
  • @Error_2646 未关注。我这里没有NOT IN 并且OP 的第一个查询中的NOT IN 不能用DISTINCT 替换。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-05
  • 2016-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-14
相关资源
最近更新 更多