【发布时间】:2020-06-21 01:34:26
【问题描述】:
我在查询编辑器中有一个带有以下 SQL 的查询:
SELECT tbl_PN_Import.PN, Last(tbl_PN_Import.Master_PN) AS Master_PN
FROM tbl_PN_Import
GROUP BY tbl_PN_Import.PN
Having (((Last(tbl_PN_Import.Master_PN)) Is Not Null))
ORDER BY tbl_PN_Import.PN;`
它在查询编辑器中返回 10,000 多条记录。
以下是示例记录列表。我们的数据库包含与备用零件号具有一对多关系的主零件号。 PN 字段包含所有部件号,包括主部件号和备用部件号。如果 PN 是主 PN,则它在 Master_PN 字段中没有条目。如果 PN 是替代部件号,则其 Master_PN 位于 Master_PN 字段中。
PN Master_PN
NAS1149FN432P
AN960-4 NAS1149FN432P
AD64ALS
SSPQ-4-3
SSPQ-04-03 SSPQ-4-3
当我使用 SQL 字符串变量在 VBA 中运行查询时,.OpenRecordSet它只返回第一条记录。当我删除 Having.... 时,它会返回预期的 70,000 多条记录。
我还有其他查询没有 Having... 动词可以正常工作。
感谢任何帮助。
【问题讨论】:
-
当您将
Last替换为Min(或Max,取决于)时,会发生什么? -
@Tomalak:当我用
Min或Max替换Last时,我得到了 70,000 多条记录。 -
您能否提供一个包含 10-15 条记录的样本,显示您的表格的外观以及您希望从中获得的结果(即概述您希望使用
GROUP BY实现的效果和HAVING)? -
@tomalak 我已将示例记录添加到问题中。
-
记录集就像一个游标。除非你调用 movenext、movelast 方法,否则你当然会在第一行返回。并且在调用 movelast 方法(或到达记录集的末尾)之前,recordcount 方法不会返回整个记录集的计数。