Ms Access SQL:连接用逗号分隔的一对多关系[重复]
Posted
技术标签:
【中文标题】Ms Access SQL:连接用逗号分隔的一对多关系[重复]【英文标题】:Ms Access SQL: Concatenate seperated by commas one to many relationship [duplicate] 【发布时间】:2016-08-26 20:31:04 【问题描述】:使用以下类型的表格:
tblRequest
-RequestID(double)
-RequestDescription (String)
tblError
-ErrorID(long integer)
-ErrorName(String)
-RequestID(double)
上述关系是一对多的关系。
我想通过以下方式查看数据。因此,我需要一个 SELECT 查询,它以下列方式显示数据。
Request Error(s)
1 Error1, Error6
2 Error2, Error3
3.4 Error4, Error2, Error1
我试图搜索涉及 FOR XML PATH('')) 的答案。但是,我认为它不能在 Ms-Access 中工作。
【问题讨论】:
这两个表有什么关系?我没有看到外键。我们怎么知道Error1、Error6和RequestID 1有关系? 我刚刚解决了我的问题。 @BaileyS 我没有更新我的表格。我只想要一个选择查询以我在问题中指定的方式查看数据。 ^^ 这是正确的重复目标。顺便说一句,使用 Double 进行 PK/FK 是灾难的根源。 关于双重作为坏键的建议非常可靠。有时1-0.1 = 0.90000000000001
【参考方案1】:
这是一个潜在的解决方案。
第 1 步:
在您的 MS Access 应用程序中创建此功能。我认为这不是最有效的解决方案,但是如果记录数量不是很大,它应该可以很好地工作。
Public Function getErrorText(ByVal MyId As Double) As String
Dim myrs As Recordset
'Create the recordset
Set myrs = CurrentDb.OpenRecordset("select distinct ErrorID from tblError where RequestID = " & MyId)
'Build the error string
Do Until myrs.EOF
getErrorText = myrs.Fields(0).Value & ", " & getErrorText
myrs.MoveNext
Loop
'Clean up
myrs.Close
Set myrs = Nothing
'Return the correct cleaned up string
getErrorText = Left(getErrorText, Len(getErrorText) - 2)
End Function
第 2 步:
然后您应该能够运行以下 SQL 语句以获得所需的输出。
SELECT distinct tblError.RequestID, getErrorText( tblError.[RequestID]) AS [Error(s)]
FROM tblError INNER JOIN tblRequest ON tblError.RequestID = tblRequest.RequestID
WHERE (((getErrorText( tblError.[RequestID])) Is Not Null));
【讨论】:
以上是关于Ms Access SQL:连接用逗号分隔的一对多关系[重复]的主要内容,如果未能解决你的问题,请参考以下文章
MS Access - 创建并填充包含由逗号分隔且没有重复值的连接文本的列
使用 MS Access 2010,编辑一个表单,3 个表,一个表是“一对多”,并且希望在一行中进行查询