MS Access 查询获取记录的子字符串并与另一个 Table 进行比较以查找缺失

MS Access Query to Take Substring of a Record and Compare To Another Table For Missing

我有两个 table 数据需要比较。 Table 1 是包含 Table 2 需要包含的所有文件的 "source data"。我试图比较的每个 table 中的一个条目是数据的文件路径,以验证它们是否在它们应该在的目录中。

两个 table 中的文件路径条目以不同方式列出,Table 1 仅包含文件名,而 Table 2 包含文件的完整文件路径。

Table 1 - "SourceFiles":

Table 2 - "AllFiles":

每个文件名都是唯一的,但它们都有一个 ID 号,我希望能够使用该 ID 号与 Table 2. 我想从文件名中提取这个 ID 号,然后比较 tables,但我在尝试 运行 查询时没有成功。

这是我当前的查询(已编辑):

SELECT [SourceFiles].[SourceAudio ID], Mid(Left([SourceFiles].[Filename], InStrRev([SourceFiles].[Filename], ".")-1), InStrRev([SourceFiles].[Filename],"_")+1) As Filename
FROM [SourceFiles] LEFT JOIN [AllFiles] 
ON Mid(Left([SourceFiles].[Filename], InStrRev([SourceFiles].[Filename], ".")-1), InStrRev([SourceFiles].[Filename],"_")+1) = Mid(Left([AllFiles].[Filename], InStrRev([AllFiles].[Filename], ".")-1), InStrRev([AllFiles].[Filename],"_")+1)
WHERE ((Mid(Left([AllFiles].[Filename], InStrRev([AllFiles].[Filename], ".")-1), InStrRev([AllFiles].[Filename],"_")+1) Is Null));

我希望此查询的结果如下所示:

但出现错误“条件表达式中的数据类型不匹配”。我回去验证了所有输入的内容是否正确。我做错了什么?

试试这个:

Select 
    *
From 
    SourceFiles
Where 
    filename Not In 
    (Select Mid(filename, InstrRev(filename, "\") + 1) From AllFiles)

那可能 运行 慢。如果是这样,将子查询的输出写入一个临时 table 字段文件名索引并在上面的查询中使用它:

Select 
    *
From 
    SourceFiles
Where 
    filename Not In 
    (Select filename From TempTable)