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:在分隔符上拆分内容并与其他表连接

MS-Access查询以在另一列中收集逗号分隔的结果

使用 MS Access 2010,编辑一个表单,3 个表,一个表是“一对多”,并且希望在一行中进行查询

将一对多关系显示为 2 列 - 1 个唯一行(ID 和逗号分隔列表)

在sql server数据库中查询一个用逗号分隔的字段的问题