Microsoft Access 2016 - 需要使用 JOIN 组合 SQL 查询....在 Col1 上最喜欢 Col2
Microsoft Access 2016 - Need to combine SQL query using JOIN .... ON Col1 MOST LIKE Col2
我在 Microsoft Access 2016 中工作。我有一个包含数千行数据的数据 table [数据]。我有一个查找 table [查找],其中包含所有已知的项目 ID。这些 table 应该组合在项目 ID 上,这是一个字符串字段。通常,我会使用以下方式加入这些 tables:
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] + '*'
唯一的问题是查找 table 中有多个条目与数据字段“相似”。我需要能够加入不仅是“LIKE”而且在所有“LIKE”中长度最长的条目。
看来我确实需要调用一个“最像”的函数,但据我所知 SQL 语法中不存在该函数。
关于如何有效地加入这两个 table 有什么建议吗?
考虑:
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 & "*");
我在 Microsoft Access 2016 中工作。我有一个包含数千行数据的数据 table [数据]。我有一个查找 table [查找],其中包含所有已知的项目 ID。这些 table 应该组合在项目 ID 上,这是一个字符串字段。通常,我会使用以下方式加入这些 tables:
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] + '*'
唯一的问题是查找 table 中有多个条目与数据字段“相似”。我需要能够加入不仅是“LIKE”而且在所有“LIKE”中长度最长的条目。
看来我确实需要调用一个“最像”的函数,但据我所知 SQL 语法中不存在该函数。
关于如何有效地加入这两个 table 有什么建议吗?
考虑:
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 & "*");