问题描述
我正在使用Microsoft Access2016。我有一个数据表[Data],其中包含数千行数据。我有一个查找表[Lookup],其中包含所有已知的项目ID。这些表应结合在项目ID(这是一个字符串字段)上。通常,我将使用以下方式联接这些表:
SELECT * FROM [Data] LEFT JOIN [Lookup] ON [Data].[ProjectID] = [Lookup].[ProjectID]
问题是[Data]项目ID字段比查找的字符串长得多。例如
数据:
- PROJECT.TS.01.004.005
查找:
- PROJECT.TS
- PROJECT.TS.01
- PROJECT.TS.02
我尝试使用以下内容:
SELECT * FROM [Data] LEFT JOIN [Lookup] ON [Data].[ProjectID] LIKE [Lookup].[ProjectID] + '*'
唯一的问题是查找表中有多个条目与数据字段相似。我需要能够加入不仅是“ LIKE”而且条目长度最大的所有“ LIKE”条目。
看来,我真正需要的是调用一个“ MOST LIKE”函数,但据我所知sql语法不存在。
关于如何有效地连接这两个表的任何建议吗?
解决方法
考虑:
SELECT * FROM [Data] LEFT JOIN [Lookup] ON [Data].[ProjectID] LIKE [Lookup].[ProjectID] + '*'
WHERE Len(Lookup.ProjectID) = DMax("Len(ProjectID)","Lookup","'" & Data.ProjectID & "' LIKE ProjectID & '*'");
或
SELECT * FROM [Data] LEFT JOIN [Lookup] ON [Data].[ProjectID] LIKE [Lookup].[ProjectID] + '*'
WHERE Len(Lookup.ProjectID) = (
SELECT Max(Len(Lookup.ProjectID)) FROM Lookup WHERE Data.ProjectID LIKE Lookup.ProjectID & "*");