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)
我有两个 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)