如何连接 Access 中涉及 Link 的多行?
How to concatenate multiple rows in Access involving a Link?
我的 Access 数据库存在以下问题:
我有 3 个表,分别是 tblComponents、tblErrors 和 linkComponentsErrors。这是一种多对多的关系,这意味着一个组件可以有多个错误,一个错误可以有多个组件。这些 a 在 linkComponentsErrors 中与它们的主键(tblComponents.componentID 和 tblErrors.errorID)链接。两个表也有一个字段用于它们的名称
tblComponents/tblErrors/linkComponentsErrors
|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-代码 Allen Browne
当我使用连接执行此查询时
SELECT tblComponents.compName, ConcatRelated("errorID", "linkComponentsErrors", "compID = " &[linkComponentsErrors].[compID]) FROM tblComponents;
我明白了:
|compName|Expr|
+------------+
| HDD-300 | 1, 2 |
+------------+
| SSD-100 | 2, 3 |
+------------+
| CPU-i7 | 3 |
+------------+
但我想要的是:
|compName|Expr|
+------------+
| HDD-300 | E101, E404 |
+------------+
| SSD-100 | E404, E123 |
+------------+
| CPU-i7 | E123 |
+------------+
我迷失在 Concat 函数中的 SQL 语法中,这个连接到错误的名称。如果你知道这个问题的解决方案,我会很高兴。
您可以为此使用我的 函数:
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;
输出:
如果您不想使用 DJoin,可以执行两个查询并使用 Allen Browne 的 ConcatRelated 函数:
与 link:
连接的帮助查询“Hilfsabfrage”
SELECT tblErrors.errName, tblErrors.errID, linkComponentsErrors.CompID FROM tblErrors INNER JOIN linkComponentsErrors ON tblErrors.errID = linkComponentsErrors.errID
以及主要查询:
SELECT tblComponents.compName, ConcatRelated("errName", "Hilfsabfrage", "compID = " & [compID]) FROM tblComponents
不要在主查询中这样做:
SELECT tblComponents.compName, ConcatRelated("errName", "Hilfsabfrage", "compID = " &[Hilfsabfrage].[compID]) 来自 tblComponents 。 查询确实没有 [Hilfsabfrage]。
您也可以在查询中放置多个 ConcatRelated。
我的 Access 数据库存在以下问题:
我有 3 个表,分别是 tblComponents、tblErrors 和 linkComponentsErrors。这是一种多对多的关系,这意味着一个组件可以有多个错误,一个错误可以有多个组件。这些 a 在 linkComponentsErrors 中与它们的主键(tblComponents.componentID 和 tblErrors.errorID)链接。两个表也有一个字段用于它们的名称
tblComponents/tblErrors/linkComponentsErrors
|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-代码 Allen Browne
当我使用连接执行此查询时
SELECT tblComponents.compName, ConcatRelated("errorID", "linkComponentsErrors", "compID = " &[linkComponentsErrors].[compID]) FROM tblComponents;
我明白了:
|compName|Expr|
+------------+
| HDD-300 | 1, 2 |
+------------+
| SSD-100 | 2, 3 |
+------------+
| CPU-i7 | 3 |
+------------+
但我想要的是:
|compName|Expr|
+------------+
| HDD-300 | E101, E404 |
+------------+
| SSD-100 | E404, E123 |
+------------+
| CPU-i7 | E123 |
+------------+
我迷失在 Concat 函数中的 SQL 语法中,这个连接到错误的名称。如果你知道这个问题的解决方案,我会很高兴。
您可以为此使用我的
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;
输出:
如果您不想使用 DJoin,可以执行两个查询并使用 Allen Browne 的 ConcatRelated 函数:
与 link:
连接的帮助查询“Hilfsabfrage”SELECT tblErrors.errName, tblErrors.errID, linkComponentsErrors.CompID FROM tblErrors INNER JOIN linkComponentsErrors ON tblErrors.errID = linkComponentsErrors.errID
以及主要查询:
SELECT tblComponents.compName, ConcatRelated("errName", "Hilfsabfrage", "compID = " & [compID]) FROM tblComponents
不要在主查询中这样做: SELECT tblComponents.compName, ConcatRelated("errName", "Hilfsabfrage", "compID = " &[Hilfsabfrage].[compID]) 来自 tblComponents 。 查询确实没有 [Hilfsabfrage]。
您也可以在查询中放置多个 ConcatRelated。