微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MS access 连接两个表,获取唯一行

如何解决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 举报,一经查实,本站将立刻删除。