我在数据库工作方面还有很多东西需要学习,所以请善待。
我正在尝试将两个具有相似数据的表组合在一起,但希望确保我没有复制任何条目。我决定使用下面的查询来查看目标表中已有多少名称
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
)
我回到了源表中总行数的一半左右。这两个总计如何不能合计到源表中的总行数?我假设重复的名字,但数字仍然没有加起来。我可以在这里找到什么?
答案 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
这将返回源中不在目的地的所有名称。