首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在涉及链接的访问中连接多个行?

如何在涉及链接的访问中连接多个行?
EN

Stack Overflow用户
提问于 2020-06-30 11:46:59
回答 2查看 177关注 0票数 1

有关Access数据库,我有以下问题:

我有三个表,分别是tblComponents、tblErrors和linkComponentsErrors。这是一个多到多的关系,这意味着一个组件可能有许多错误,而一个错误可能有很多组件。这些a与它们的primaryKey (tblComponents.componentID和tblErrors.errorID)在linkComponentsErrors中链接。两个表的名称都有一个字段。

tblComponents / tblErrors / linkComponentsErrors

代码语言:javascript
运行
复制
|compID|compname|        |errID|errname|        |compID|errID| 
+------------+           +------------+         +------------+
| 1 | HDD-300 |          | 1 | E101 |           | 1 | 1 |
+------------+           +------------+         +------------+
| 2 | SSD-100 |          | 2 | E404 |           | 1 | 2 |
+------------+           +------------+         +------------+
| 3 | CPU-i7 |           | 3 | E123 |           | 2 | 2 |
                                                +------------+
                                                | 2 | 3 |
                                                +------------+
                                                | 3 | 3 |

对于级联,我通过艾伦·布朗使用VBA-Code。

当我使用连接执行此查询时

代码语言:javascript
运行
复制
SELECT tblComponents.compName, ConcatRelated("errorID", "linkComponentsErrors", "compID = " &[linkComponentsErrors].[compID]) FROM tblComponents;

我明白了:

代码语言:javascript
运行
复制
    |compName|Expr| 
    +------------+
    | HDD-300 | 1, 2 |
    +------------+
    | SSD-100 | 2, 3 |
    +------------+
    | CPU-i7 | 3 |
    +------------+

但我想要的是:

代码语言:javascript
运行
复制
    |compName|Expr| 
    +------------+
    | HDD-300 | E101, E404 |
    +------------+
    | SSD-100 | E404, E123 |
    +------------+
    | CPU-i7 | E123 |
    +------------+

我迷失在这个连接到错误名称的Concat函数中的SQL语法中。如果你知道这个问题的解决办法,我会非常高兴的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-30 12:25:33

您可以使用我的DJoin函数:

代码语言:javascript
运行
复制
SELECT 
    tblComponents.compname, 
    DJoin(
        "errname",
        "SELECT compID, errname 
            FROM linkComponentsErrors 
            INNER JOIN tblErrors ON linkComponentsErrors.errID = tblErrors.errID",
        "compID = " & [tblComponents].[compID] & "",
        ", ") AS errnames
FROM 
    tblComponents 
INNER JOIN 
    linkComponentsErrors ON tblComponents.compID = linkComponentsErrors.compID
GROUP BY 
    tblComponents.compname, 
    DJoin(
        "errname",
        "SELECT compID, errname 
            FROM linkComponentsErrors 
            INNER JOIN tblErrors ON linkComponentsErrors.errID = tblErrors.errID",
        "compID = " & [tblComponents].[compID] & "",
        ", "), 
    tblComponents.compID
ORDER BY 
    tblComponents.compID;

输出:

票数 2
EN

Stack Overflow用户

发布于 2020-07-01 09:24:31

如果不想使用DJoin,可以执行两个查询并使用Allen的ConcatRelated函数:

一个帮助查询"Hilfsabfrage“,它与链接连接:

代码语言:javascript
运行
复制
SELECT tblErrors.errName, tblErrors.errID, linkComponentsErrors.CompID FROM tblErrors INNER JOIN linkComponentsErrors ON tblErrors.errID = linkComponentsErrors.errID

以及主要的查询:

代码语言:javascript
运行
复制
SELECT tblComponents.compName, ConcatRelated("errName", "Hilfsabfrage", "compID = " & [compID]) FROM tblComponents

不要在主查询中这样做:从tblComponents.compName选择ConcatRelated("errName“、"Hilfsabfrage”、"compID =“&Hilfsabfrage.compID)。该查询没有Hilfsabfrage。

您还可以在查询中放置多个ConcatRelated。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62656728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档