Sql 如何连接两个表并返回第一个表中不在第二个表中的值?

Sql 如何连接两个表并返回第一个表中不在第二个表中的值?,sql,Sql,我有两个表,第一个表包含id和employee_名称,第二个表包含employee_id和id以及其他一些列。如何将第一个表与第二个表连接起来,以便输出第一个表中未出现的所有员工ID和其他列?我的问题是: select employee_id from data2 left join data1 on data2.employee_id = data1.id where employee_id is NULL 这将输出正确的行数,但其中没有值。非常感谢您的帮助 您的表在SQL中被翻转。根据您的

我有两个表,第一个表包含id和employee_名称,第二个表包含employee_id和id以及其他一些列。如何将第一个表与第二个表连接起来,以便输出第一个表中未出现的所有员工ID和其他列?我的问题是:

select employee_id
from data2 left join data1 on data2.employee_id = data1.id
where employee_id is NULL

这将输出正确的行数,但其中没有值。非常感谢您的帮助

您的表在SQL中被翻转。根据您的叙述,SQL应该是:

select data1.*
from data1
left join data2 on data2.employee_id = data1.id
where data2.employee_id is NULL

您的表在SQL中被翻转。根据您的叙述,SQL应该是:

select data1.*
from data1
left join data2 on data2.employee_id = data1.id
where data2.employee_id is NULL

您不需要使用join,只需使用'notin'子句即可

select id
from table1
where id not in (select employee_id from table2)

如果有效,请告诉我。

您不需要使用join,只需使用'not in'子句即可

select id
from table1
where id not in (select employee_id from table2)

如果有效,请告诉我。

如果我正确理解了您的问题,您希望从data1获取其雇员id值在data2的列id中不存在的记录

按照当前查询的结构,您正在请求员工id。。。其中employee_id为NULL,因此只返回NULL记录。相反,对data1进行如下查询:

从数据1中选择*其中员工id不在 从数据2中选择id


这将使用子查询查找data2中id值的列表,然后仅返回data1中员工id不在该列表中的记录。

如果我正确理解您的问题,您希望从data1中获取其员工id值不在data2中id列中的记录

按照当前查询的结构,您正在请求员工id。。。其中employee_id为NULL,因此只返回NULL记录。相反,对data1进行如下查询:

从数据1中选择*其中员工id不在 从数据2中选择id


这将使用子查询查找data2中id值的列表,然后仅返回data1中员工id不在该列表中的记录。

是否确实不希望筛选器位于data1.id为NULL的位置?是否可以提供一些示例数据并期望结果?从data1中选择*,从data2中选择*data1.id为NULL时要使用的筛选器?能否提供一些示例数据并期望结果?从data1中选择*,但从Data2中选择*,连接更好,或者不存在。更直观的空处理,有时更好地使用索引。实际上,最好避免不在和不存在使用。特别是在我们知道employee_id可以为NULL的情况下,“Not Exists”只会导致TRUE或FALSE,并且不会给出第二个表中的employee id列表。为了避免出现空情况,可以使用AND添加另一个子句。我想使用“notexists”比使用Join更好,因为您需要处理的数据集更少“不存在”只会导致TRUE或FALSE-这是不正确的。@错误\u 2646我没有看到“存在”运算符返回一些行或数据集。我想看看它,如果你可以附加在任何博客上说。谢谢这将是有见地的。存在是非常有用的。我找不到一个好的博客,但这里只是一个使用示例。这种情况的一个主要好处是,在不存在的情况下,您可以轻松地执行更复杂的逻辑。例如,从表2中选择1,其中Table1.field1=blahblahInTable2结束时的情况,以及Table2.Field2在“a”、“B”、“C”中的情况。。。。在最简单的情况下,您可以获得更简单的空处理和更好的索引覆盖率,在更复杂的情况下,它可以通过使用In/NOT In来简化查询。连接更好,或者不存在。更直观的空处理,有时更好地使用索引。实际上,最好避免不在和不存在使用。特别是在我们知道employee_id可以为NULL的情况下,“Not Exists”只会导致TRUE或FALSE,并且不会给出第二个表中的employee id列表。为了避免出现空情况,可以使用AND添加另一个子句。我想使用“notexists”比使用Join更好,因为您需要处理的数据集更少“不存在”只会导致TRUE或FALSE-这是不正确的。@错误\u 2646我没有看到“存在”运算符返回一些行或数据集。我想看看它,如果你可以附加在任何博客上说。谢谢这将是有见地的。存在是非常有用的。我找不到一个好的博客,但这里只是一个使用示例。这种情况的一个主要好处是,在不存在的情况下,您可以轻松地执行更复杂的逻辑。例如,从表2中选择1,其中Table1.field1=blahblahInTable2结束时的情况,以及Table2.Field2在“a”、“B”、“C”中的情况。。。。在最简单的情况下,您可以获得更简单的空处理和更好的索引覆盖率,在更复杂的情况下,它可以真正简化查询,而不是使用In/notin。