我的access数据库有以下问题:
我有三个表,分别是tblcomponents、tblerrors和linkcomponentserrors。这是一个多对多关系,这意味着一个组件可以有许多错误,而一个错误可以有许多组件。它们与linkcomponentserrors中的主键(tblcomponents.componentid和tblerErrors.errorid)链接。两个表的名称都有一个字段
TBL组件/TBL错误/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 |
对于连接,我使用allen browne的vba代码
当我用连接进行这个查询时
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语法中,这个连接到了错误的名称。如果你知道这个问题的解决办法,我将非常高兴。
2条答案
按热度按时间6ss1mwsb1#
您可以使用我的djoin函数:
输出:
yzckvree2#
如果不想使用djoin,可以执行两个查询并使用allen browne的concatrelated函数:
一个帮助查询“hilfsabfrage”,它使用以下链接进行连接:
以及主查询:
不要在主查询中执行此操作:从tblcomponents中选择tblcomponents.compname,concatrelated(“errname”,“hilfsabfrage”,“compid=”&[hilfsabfrage].[compid])。查询必须没有[hilfsabfrage]。
您还可以在查询中放置多个concatrelated。