我有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位数字,则他会将6666666
与1166666
而不是6666666
进行匹配
我应该怎么写?
答案 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没有合并使用