我有三个表,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。
答案 0 :(得分:1)
加入3个表:加入Template
和tblPrefs
中的tblTemplates
个字段,然后您应该加入Tagname
和tblBLNALM
的{{1}},但是在这里,您无法直接加入字段,因此请创建一个查询,其中选择Pref
中的所有列,然后添加一个计算列,该列返回tblBLNALM
字段中的起始字母,并将其用于与Tagname
的联接而不是桌子。
答案 1 :(得分:1)
您可以在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 |
+------------+----------+------------+----------+----------------------+