如何解决MS access 连接两个表,获取唯一行
这是对上一个问题 original answer 的修改,我希望正确的做法是开始一个新线程。 我有一个叫做 Parts 的表,PartRefID 是 PK
PartRefID PartDefID AssemblyID
1 2 c63df10b-8250-4aa5-9889-9e8046331dbf
11 1 db51f4a8-3ffa-41f7-81c1-a9accbbb299a
67 6 136fc5d8-7b65-41b5-bca3-7d4180a1e0ab
77 5 38fa8b7a-2945-4546-8eab-7865a1e515b2
133 2 c63df10b-8250-4aa5-9889-9e8046331dbf
134 6 136fc5d8-7b65-41b5-bca3-7d4180a1e0ab
我需要提取具有唯一 AssemblyID 的行。这是 GMB 用以下 sql 回答的:
select *
from parts as p
where [PartRefID] = (
select max(p1.[PartRefID])
from parts as p1
where p1.[AssemblyID] = p.[AssemblyID] and p1.[PartDefID] = 2
)
效果很好。然而,要求已经改变,我必须忽略 PartDefID 字段,也可能有代表我不想要的零件的 AssemblyID。 上表中显示的 AssemblyID 代表一个电气连接器部件。 电连接器部件的 Partclass 总是为 1,它在另一个名为 PartDeFinitions 的表中定义,如下所示:
PartDefID PartClass PartNumber
1 1 MS27467T23F55P
2 1 330-00186-09
3 2 336-00024-00
4 2 336-00022-00
5 1 MS27468T23F55S
6 1 330-00184-09
以我有限的 sql 知识,我认为有必要加入并想出了以下代码:
SELECT Parts.*,PartDeFinitions.PartClass
From PartDeFinitions
INNER Join Parts
On PartDeFinitions.PartDefID = Parts.PartDefID
Where (((PartDeFinitions.PartClass) = 1))
这让我很接近,它生成零件表中的所有零件,这些零件是连接器。但是,有一些重复的 AssemblyID。 我需要的是产生以下内容:
PartRefID PartDefID AssemblyID
1 2 c63df10b-8250-4aa5-9889-9e8046331dbf
11 1 db51f4a8-3ffa-41f7-81c1-a9accbbb299a
67 6 136fc5d8-7b65-41b5-bca3-7d4180a1e0ab
77 5 38fa8b7a-2945-4546-8eab-7865a1e515b2
如果我没有提出一个清晰简洁的问题,我深表歉意 谢谢你的帮助 再次感谢 GMB
解决方法
如果我理解正确,您希望在子查询和外部查询中都通过 PartClassId
进行过滤:
select p.*,pd.PartClass
From Parts as p inner join
PartDefinitions as pd
on pd.PartDefID = p.PartDefID
where pd.PartClassId = 1 and
p.pPartRefID = (select max(p2.pPartRefID)
from parts as p2 inner join
PartDefinitions as pd2
on pd2.PartDefID = pd.PartDefID
where p2.AssemblyID = p.AssemblyID and
p2.PartClassId = 1
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。