Sql 如何交叉引用和组合多个表中的值
我有三个表,tblTemplates、tblBLNALM和tblPrefs。它们遵循以下结构: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 | ------------
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),您将看到一个违规,即。“每个属性只包含原子(不可分割)值”。@有一天,不幸的是,它不是我的数据,我以给定的形式获取它,并且必须处理它。幸运的是,在其他人的帮助下,它现在被分类了。这正是我想要的,谢谢,我不知道你可以在连接中使用字符串操作!