如何交叉引用和组合来自多个表的值
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 |
+------------+----------+------------+----------+----------------------+
我有三个表,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 |
+------------+----------+------------+----------+----------------------+