Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从一个表中选择不在第二个表中的项目_Sql_Ms Access - Fatal编程技术网

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

Sql 从一个表中选择不在第二个表中的项目,sql,ms-access,Sql,Ms Access,我在Access中有一个数据库,其中有两个表,分别名为“必需的\u组件”和“实际的\u组件” **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 现

我在Access中有一个数据库,其中有两个表,分别名为“必需的\u组件”和“实际的\u组件”

**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
现在,我想显示实际缺少的组件。给定示例的组件缺少3个组件:2->comp2和1->comp3

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

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

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

但同样,您的表设计也存在问题,解决这个问题对于您将来的编码来说是一个更容易的解决方案

-未经测试

   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

正如您在必要的组件中看到的,有3个必要的组件2,而在实际的组件中只有1个。对于comp3也一样,需要comp3和实际comp3和实际comp3仅1根据您当前的数据,所有组件都存在于实际组件中。从必要的_组件中选择名称,其中名称不在按名称ASC从实际_组件中选择名称;将通过名称而不是数字为您提供实际组件中缺少的组件。查询的输出应该是:COMP2、COMP2、COMP3->这些是缺少的组件。在表设计中存在严重缺陷,您应该考虑重新设计表。