首页 > 解决方案 > 在基于嵌套 SELECT 的 SQLite LIKE 子句中使用多个搜索条件

问题描述

我在 SQLite 的“SOURCE”表中有一个完整路径列表,在 SPECIFICFILES 表中有一个特定文件名列表(这显然是路径的一部分)。

我想根据文件名在 SOURCE 表中查找文件。我正在尝试使用“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 Directory\MyFile.txt

Table SPECIFICFILES:
Filename
MyFile.txt

标签: sqlitejoinselectinner-joinsql-like

解决方案


您可以通过加入表格来做到这一点:

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; 

请参阅演示


推荐阅读