MS Access Query для получения подстроки записи и сравнения с другой таблицей для пропавших без вести - PullRequest
0 голосов
/ 29 июня 2018

У меня есть две таблицы данных, которые мне нужно сравнить. Таблица 1 - это «исходные данные», которые содержат все файлы, которые должны содержать Таблица 2. Одна из записей в каждой таблице, которую я пытаюсь сравнить, - это путь к данным, чтобы убедиться, что они находятся в каталоге, в котором они должны быть.

Записи filepath в обеих таблицах перечислены по-разному, в Таблице 1 просто указано имя файла, а в Таблице 2 - полный путь к файлу файла.

Таблица 1 - «Исходные файлы»:

SourceFiles

Таблица 2 - «AllFiles»:

AllFiles

Каждое имя файла уникально, но все они имеют идентификационный номер, который я хочу иметь и использовать для сравнения с таблицей 2. Я хочу извлечь этот идентификационный номер из имени файла, а затем сравнить таблицы, но я У меня нет успеха при попытке выполнить запрос, который я сделал для этого.

Вот мой запрос в настоящее время (отредактировано):

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 голосов
/ 29 июня 2018

Попробуйте это:

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