从一个表中选择不在第二个表中的项目

时间:2015-07-21 09:34:52

标签: sql ms-access

我在Access中有一个数据库,有两个名为Necessary_components和Actual_components的表

**Necessary_components data:**
ID     Name
1      comp1
2      comp2
3      comp2
4      comp2
5      comp3
6      comp3

**Actual_components data:**
ID     Name
143    comp1
164    comp2
166    comp3

现在我想显示Actual_components中缺少的组件(对于给定的示例,缺少3个组件:2-> comp2和1-> comp3)。

下面是我使用的代码,但它不起作用,因为如果有更多具有相同名称的组件,它将不会考虑。甚至可以有10个具有相同名称的组件。

SELECT Name FROM Necessary_components WHERE
Name NOT IN (SELECT Name FROM Actual_components) ORDER BY Name ASC;

2 个答案:

答案 0 :(得分:0)

我不明白你的问题。根据您当前的数据,所有组件都存在于实际组件中 如果说,你有一个名为 - comp4的组件在必要的组件中,那么你将使用LEFT OUTER JOIN得到Comp4

答案 1 :(得分:0)

这样的事可以帮助你...

但同样,您的桌面设计存在问题,修复这是您未来编码的更简单的解决方案。

- 未经测试

   select N.Name FROM
(
    select N.Name, count(N.Name) [NecessCount] 
    from Necessary_components N group by N.Name 
) AS T1

Left OUTER JOIN 

(
    select A.Name, count(A.Name) as [ActualCount]
    from Actual_components A group by A.Name 
) AS T2 

on T1.Name = T2. Name
where [NecessCount] - isnull([ActualCount] ,0) > 0