如何交叉引用和组合来自多个表的值

How to crossreference and combine values from many tables

我有三个表,tblTemplates、tblBLNALM 和 tblPrefs。它们遵循以下结构:

tblPrefs:
--------------------------------------------
|  Pref  |  Derived-Template  |  Template  |
--------------------------------------------
|GA      |BLNALM_F03          |AIN_F03     |
--------------------------------------------
|HSSD    |BLNALM_F01          |AIN_F01     |
-------------------------------------------- etc...

tblBLNALM:
------------------------------------------------------------------
|  Controller  |  Compound  |  Tagname  | BaseTemplate  |  Name  |
------------------------------------------------------------------
|15CP42        |15F00       |HSSD30001C |BLNALM         |IN_7    |
------------------------------------------------------------------
|15CP12        |15F06       |GA123456   |BLNALM         |IN_3    |
------------------------------------------------------------------ etc...

tblTemplates:
---------------------------------------
|  Template  |  Maintenance Override  |
---------------------------------------
|AIN_F01     |IN_7                    |
---------------------------------------
|AIN_F02     |IN_5                    |
--------------------------------------- 
|AIN_F03     |IN_7                    |
---------------------------------------etc...

我需要做的是查看tblPrefs中是否存在tblBLNALM.Tagname开始的数字之前的字符,如果存在,则使用它来确定它是什么模板。然后使用这个模板和 tblTemplates 计算出它是什么维护覆盖。

最终结果应该是这样的:

-----------------------------------------------------------------------------
|  Controller  |  Compound  |  Tagname  | Template  | Maintenance Override  |
-----------------------------------------------------------------------------
|15CP12        |15F06       |GA123456   |AIN_F03    |IN_7                   |
----------------------------------------------------------------------------- etc...

我的直觉是使用一些 EXISTS 语句并可能嵌套它们,但这并没有帮助,那么我该从这里去哪里呢?

我使用的是 msaccess 2010。

Join 3 tables: join Template fields in tblPrefs and tblTemplates, then you should join Tagname of tblBLNALM and Pref,但在这里您不能直接连接字段,因此创建一个查询,其中 select 来自 tblBLNALM 的所有列并添加一个计算列,其中 returns 从 [=] 开始的字母13=] 字段并将其用于连接 tblPrefs 而不是 table.

您可以在 SQL 联接中使用字符串操作。

比较 标签名 是否以您的 pref 开头?

在 SQL 中是:

SELECT tblBLNALM.Controller, 
    tblBLNALM.Compound, 
    tblBLNALM.Tagname, 
    tblTemplates.Template, 
    tblTemplates.[Maintenance Override]
FROM (tblTemplates 
    INNER JOIN tblPrefs ON tblTemplates.Template = tblPrefs.Template) 
    INNER JOIN tblBLNALM ON (tblPrefs.Pref = left(tblBLNALM.Tagname, len(tblPrefs.Pref)));

输出将如您所述:

+------------+----------+------------+----------+----------------------+
| Controller | Compound |  Tagname   | Template | Maintenance Override |
+------------+----------+------------+----------+----------------------+
| 15CP12     | 15F06    | GA123456   | AIN_F03  | IN_7                 |
| 15CP42     | 15F00    | HSSD30001C | AIN_F01  | IN_7                 |
+------------+----------+------------+----------+----------------------+