Microsoft Access 2016-需要结合使用JOIN的SQL查询.... ON Col1最喜欢Col2

问题描述

我正在使用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 & "*");