【问题标题】:Microsoft Access 2016 - Need to combine SQL query using JOIN .... ON Col1 MOST LIKE Col2Microsoft Access 2016 - 需要使用 JOIN 组合 SQL 查询 .... ON Col1 MOST LIKE Col2
【发布时间】:2021-01-27 19:29:44
【问题描述】:

我在 Microsoft Access 2016 中工作。我有一个包含数千行数据的数据表 [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”条目中长度最长的条目。

看起来我真的需要调用一个“最喜欢”的函数,但据我所知,它在 SQL 语法中并不存在。

关于如何有效地连接这两个表有什么建议吗?

【问题讨论】:

    标签: sql database ms-access sql-like ms-access-2016


    【解决方案1】:

    考虑:

    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 & "*");
    

    【讨论】:

    • 这非常有效。我认为域函数及其语法是我需要的关键。谢谢
    猜你喜欢
    • 1970-01-01
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-05
    • 2018-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多