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

时间:2018-06-29 18:06:49

标签: sql ms-access substring ms-access-2016

我需要比较两个数据表。表1是“源数据”,其中包含表2需要包含的所有文件。我要比较的每个表中的条目之一是数据的文件路径,以验证它们是否应位于目录中。

两个表中的文件路径条目的列出方式有所不同,表1仅包含文件名,表2包含文件的完整文件路径。

表1-“源文件”:

SourceFiles

表2-“所有文件”:

AllFiles

每个文件名都是唯一的,但是它们都具有一个ID号,我希望该ID号可以用来与表2进行比较。我想从文件名中提取该ID号,然后比较表,但是我尝试运行我执行的查询时没有成功。

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

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));

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

QueryResult

但是它出现一个错误,提示“ 条件表达式中的数据类型不匹配”。我回过头来,验证所有内容均输入正确。我在做什么错了?

1 个答案:

答案 0 :(得分:0)

尝试一下:

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

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

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