Sql 从一个表中选择不在第二个表中的项目
我在Access中有一个数据库,其中有两个表,分别名为“必需的\u组件”和“实际的\u组件”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 现
**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->这些是缺少的组件。在表设计中存在严重缺陷,您应该考虑重新设计表。