access查询和vba sql为“having”返回不同的数据

nhn9ugyo  于 2021-08-09  发布在  Java
关注(0)|答案(2)|浏览(317)

我在查询编辑器中有一个具有以下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;`

它在查询编辑器中返回10000+条记录。
下面是一个样本记录列表。我们的数据库包含与备用零件号有一对多关系的主零件号。pn字段包含主零件号和备用零件号。如果pn是主pn,则在主pn字段中没有条目。如果零件号是备用零件号,则其主零件号在主零件号字段中。

PN                 Master_PN 
NAS1149FN432P 
AN960-4            NAS1149FN432P 
AD64ALS 
SSPQ-4-3 
SSPQ-04-03         SSPQ-4-3

在vba中使用sql字符串变量和 .OpenRecordSet 它只返回第一条记录。当我移除 Having.... 它返回预期的70000多条记录。
我有其他的问题没有那就没有了 Having... 好用的动词。
感谢您的帮助。

oknrviil

oknrviil1#

尝试过滤空值:

SELECT tbl_PN_Import.PN, Last(tbl_PN_Import.Master_PN) AS Master_PN
FROM tbl_PN_Import
WHERE tbl_PN_Import.Master_PN Is Not Null
GROUP BY tbl_PN_Import.PN
ORDER BY tbl_PN_Import.PN

或者,因为last只返回“值”:

SELECT tbl_PN_Import.PN, Max(tbl_PN_Import.Master_PN) AS Master_PN
FROM tbl_PN_Import
WHERE tbl_PN_Import.Master_PN Is Not Null
GROUP BY tbl_PN_Import.PN
ORDER BY tbl_PN_Import.PN
vaqhlq81

vaqhlq812#

LAST 未在未排序的结果集上定义,这意味着任何行都可以。使用子查询强制执行特定顺序,或避免使用 LAST 总而言之。
子查询的示例如下:

SELECT PN, Last(Master_PN) AS Master_PN
FROM (SELECT * FROM tbl_PN_Import ORDER BY Some_ID_field)
GROUP BY PN
Having Last(Master_PN) Is Not Null
ORDER BY tbl_PN_Import.PN;

如果你没有一个id字段或任何你可以订购的东西,你不能期望 LAST 产生连贯的结果。

相关问题