Access 2010 中 1:M Join 的左表中仅显示唯一记录

Posted

技术标签:

【中文标题】Access 2010 中 1:M Join 的左表中仅显示唯一记录【英文标题】:Display Only Unique Records in Left Table of 1:M Join in Access 2010 【发布时间】:2013-02-05 16:55:52 【问题描述】:

我有一个属性表、一个土地所有者表和一个将它们关联起来的链接表。财产和土地所有者之间的关系是一对多的。我想使用一个查询来构建一个数据表视图,该视图显示连接到每个属性的土地所有者。我已经成功地让 LEFT JOIN 工作,但我更愿意在结果中只显示左表中的唯一记录(可接受空白单元格中的空值)。

当前结果:


PID       OWNERID
 1           32
 1           23
 2           45
 2           18
 2           12
 3           98
 3           12
 3           23

想要的结果:


PID       OWNERID
 1           32
             23
 2           45
             18
             12
 3           98
             12
             23

这可能吗?

【问题讨论】:

这不是 sql 问题,而是演示问题。你打算在哪里展示结果?表单?一份报告?在哪个版本的 MS Access 中? Access 2010(在标题中)。演示文稿是一个数据表/表格视图 - 这是一个由访问中的查询填充的表单(需要保持排序能力等)。 【参考方案1】:

我对此不太满意,因为我认为报告会更适合这种类型的展示,但这是一个想法。你只会减少排序的能力。 PID 必须始终是第一个排序字段,否则它没有意义。

你需要一个文本框:

=getposition([pid])

一些代码

Function getposition(pos)
    ''Set rs = Screen.ActiveForm.RecordsetClone
    Set rs = Forms!NameOfFormHere.RecordsetClone
    rs.FindFirst "pid=" & Nz(pos, 0)
    getposition = rs!ownerid
End Function

和条件格式:

【讨论】:

我不确定这是如何工作的。据我了解,该函数检查特定 PID 单元格值的行是否与表中特定 PID 的第一次出现的行匹配 - 如果不是,则单元格不显示?代码去哪儿了?为什么需要一个文本框? 代码放在任何模块中。文本框是有条件格式检查的东西。 我在项目中添加了一个模块并将上面的代码粘贴在其中。我通过调用该函数在表单中添加了一个文本框。我收到一个错误:“您输入的引用是对 RecordsetClone 属性的无效引用”。 代码是一种方法的草图,将引用从 Screen.ActiveForm 更改为您的表单名称,如上所示。 顺便说一句,我不确定你是否应该这样做,因为我相信你失去的远比得到的多。

以上是关于Access 2010 中 1:M Join 的左表中仅显示唯一记录的主要内容,如果未能解决你的问题,请参考以下文章

Access2010打开系统表MSysObjects的控制权限

数据库中的左连接(left join)和右连接(right join)区别

MS Access 2007 中的 SQL JOIN 问题

MS-Access 中的 SQL:使用 COUNT、JOIN 并返回 0

ms-access 中的左连接和内连接

EF Linq中的左连接Left Join查询