搜索2次以查找2个表之间的匹配项

时间:2019-05-23 13:52:21

标签: ms-access

我有2个ID为ID的表。

我想做类似左联接的事情:

我希望如果TABLE2中的ID不存在,它将在TABLE2中使用相同的5位数字搜索ID。

但是我希望它搜索紧随其后的后5位之间的匹配项。

例如:

表1:

ID       Name
1111111  'aa'
2222222  'bb'
3333333  'cc'
4444444  'dd'
5555555  'ee'
6666666  'ff'

表2:

ID       City
1166666  're'
7833333  'tv'
4444444  'gh'
8547555  'ie'
6666666  'rt'

可接受的结果:

ID       Name  City  Status
1166666  'aa'  're'  ok
2222222  'bb'        no_record
3333333  'cc'  'tv'  ok \\last 5 digits are match.
4444444  'dd'  'gh'  ok
5555555  'ee'        no_record \\ just the last 3 digits are match.
6666666  'ff'  'rt'  ok 

在我的示例中,如果将一起搜索完全匹配的后5位数字,则他会将66666661166666而不是6666666进行匹配

我应该怎么写?

3 个答案:

答案 0 :(得分:1)

在MS Access中,如果后五个字符是唯一的,则可以使用以下内容:

select t1.*, t2.city,
       iif(t2.id is not null, "ok", "no record)
from table1 as t1 left join
     table2 as t2
     on right(t2.id, 5) = right(t1.id, 5);

您可以将其扩展为:

select t1.*, nz(t2.city, t2_5.city) as city,
       iif(t2.id is not null or t2_5.id is not null, "ok", "no record)
from (table1 as t1 left join
      table2 as t2
      on t2.id = t1.id
     ) left join
     table2 as t2_5
     on right(t2.id, 5) = right(t1.id, 5) and t2.id is null

答案 1 :(得分:0)

您可以使用MOD获取数字的最后5个,以便查询如下:

SELECT T1.NAME, COALESCE(T2.CITY, T3,CITY) AS CITY
FROM TABLE1 T1
LEFT JOIN TABLE2 T2 ON T1.ID = T2.ID
LEFT JOIN TABLE2 T3 ON MOD(T1.ID,100000) = MOD(T2.ID,100000)

答案 2 :(得分:0)

两次加入表2。一次使用完整ID,一次使用正确ID并合并。

SELECT T1.ID, T1.Name, Nz(T2.City,T3.City) as City
FROM Table1
LEFT JOIN Table2 T2
 on T1.ID = T2.ID
LEFT JOIN table2 T3
 on right(T1.ID,5) = right(T3.ID,5)

如果if或isull或NZ没有合并使用