#sqlite #join #select #inner-join #sql-like
#sqlite #Присоединиться #выберите #внутреннее соединение #sql-подобный
Вопрос:
У меня есть список полных путей в таблице «SOURCE» в SQLite и список конкретных имен файлов (которые, очевидно, будут частью пути) в таблице SPECIFICFILES.
Я хочу найти файлы в ИСХОДНОЙ таблице на основе их имен файлов. Я пытаюсь использовать «LIKE» для сопоставления части пути, но приведенный ниже поиск ничего не возвращает:
select * from SOURCE WHERE FullPath like (select char(39)||'%'||"SPECIFICFILES"."Filename"||'%'||char(39) FROM SPECIFICFILES);
(Char(39) — это цитата в ASCII).
Этот запрос ничего не возвращает. Возможно ли это в SQLite, пожалуйста, или мне нужно использовать C # для запуска каждого запроса по очереди?
Добавление некоторых примеров данных:
Table SOURCE:
FullPath
C:My DirectoryMyFile.txt
Table SPECIFICFILES:
Filename
MyFile.txt
Комментарии:
1. Пожалуйста, включите некоторые примеры данных.
Ответ №1:
Вы можете сделать это, объединив таблицы:
SELECT s.*, f.*
FROM SOURCE s INNER JOIN SPECIFICFILES f
ON s.FullPath LIKE '%' || f.Filename || '%';
Я не уверен, почему вы использовали в своем коде CHAR(39)
.
Является ли это частью путей?
Также, если имя файла находится в конце FullPath
, без какого
-либо завершения, нет необходимости объединять подстановочный %
знак в конце:
SELECT s.*, f.*
FROM SOURCE s INNER JOIN SPECIFICFILES f
ON s.FullPath LIKE '%' || f.Filename;
Смотрите демонстрацию.
Комментарии:
1. Большое вам спасибо. Очень признателен. Я включил символ (39) в ошибочную попытку воспроизвести синтаксис, используемый LIKE (в том смысле, что строка обычно заключена в кавычки).