Sql 如何交叉引用和组合多个表中的值

Sql 如何交叉引用和组合多个表中的值,sql,ms-access,ms-access-2010,Sql,Ms Access,Ms Access 2010,我有三个表,tblTemplates、tblBLNALM和tblPrefs。它们遵循以下结构: tblPrefs: -------------------------------------------- | Pref | Derived-Template | Template | -------------------------------------------- |GA |BLNALM_F03 |AIN_F03 | ------------

我有三个表,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...
我需要做的是查看tblBLNALM.Tagname中数字开头之前的字符是否存在于tblPrefs中,如果存在,请使用此选项确定它是什么模板。然后使用此模板和tblTemplates计算出它是什么维护覆盖

最终结果应该是这样的:

-----------------------------------------------------------------------------
|  Controller  |  Compound  |  Tagname  | Template  | Maintenance Override  |
-----------------------------------------------------------------------------
|15CP12        |15F06       |GA123456   |AIN_F03    |IN_7                   |
----------------------------------------------------------------------------- etc...
我的直觉是使用一些
EXISTS
语句,也许会嵌套它们,但这并没有帮助,所以我该怎么办呢


我正在使用msaccess 2010。

连接3个表:连接
tblPrefs
tblTemplates
中的
模板
字段,然后您应该连接
tblBLNALM
Pref
标记名
,但是在这里您不能直接连接字段,所以创建一个查询,其中,从
tblBLNALM
中选择所有列,并添加一个计算列,该列返回
标记名
字段中的起始字母,并将其与
tblPrefs
而不是表一起使用。

您可以在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                 |
+------------+----------+------------+----------+----------------------+

使用查询代替tblBLNALM,其中添加了带标记名前缀的calcutaed列。然后将此查询与剩下的两个表链接。@SergeyS我不能100%确定您的意思我已经解决了谢谢,如果您想要积分,请将其作为答案提交。如果您在编写简单查询(SQL DML)时遇到问题,请仔细查看您的设计(SQL DDL),您将看到一个违规,即。“每个属性只包含原子(不可分割)值”。@有一天,不幸的是,它不是我的数据,我以给定的形式获取它,并且必须处理它。幸运的是,在其他人的帮助下,它现在被分类了。这正是我想要的,谢谢,我不知道你可以在连接中使用字符串操作!