行不在'并且在'中排不等于表中的总行数

时间:2018-01-04 23:35:07

标签: sql-server

我在数据库工作方面还有很多东西需要学习,所以请善待。

我正在尝试将两个具有相似数据的表组合在一起,但希望确保我没有复制任何条目。我决定使用下面的查询来查看目标表中已有多少名称

select A.Name
From SourceTable A
where Name NOT IN
(
select B.Name
From [Production].[dbo].[DestinationTable] B
)

这返回了0行,所以我假设每个Name都已经在目标表中。但是当我将查询更改为

select A.Name
From SourceTable A
where Name IN
(
select B.Name
From [Production].[dbo].[DestinationTable] B
)

我回到了源表中总行数的一半左右。这两个总计如何不能合计到源表中的总行数?我假设重复的名字,但数字仍然没有加起来。我可以在这里找到什么?

2 个答案:

答案 0 :(得分:1)

您未从两个查询中获得总行数的原因是您的DestinationTable中有NULL个值。

通常,您忽略了检查空值,这就是原因。您可以添加OR name is null来查看它。

使用

进行检查
select count(*) from destinationtable where name is null

或者您可以执行CROSS JOIN并亲自查看数据不匹配的位置并检查原因

答案 1 :(得分:1)

卡米尔的回答很好地解释了Set rs = db.OpenRecordSet("SELECT Width FROM " & Conveyor_ID) IN的情况。但是,查看目标表是否缺少源表中的任何名称的更好方法是使用NOT IN并检查NULL。

查询如下所示:

LEFT JOIN

这将返回源中不在目的地的所有名称。