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)区别