Использование нескольких критериев поиска в предложении SQLite LIKE на основе вложенного ВЫБОРА

#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 (в том смысле, что строка обычно заключена в кавычки).