我正在尝试search
我的表格中的String
。这些值存储在
此格式的列
我的搜索字符串与上面类似。 i.e:
逗号分隔String
我的查询是查明搜索字符串中是否存在任何值是否为我的列。
我试过的事情:
使用Like
:Like
来做它。但是它匹配单个值,即3个搜索字符串值我必须做出类似条件(对于大表来说代价很高)
SELECT
* from
WHERE
mycol
LIKE
'myval,%'or
mycol
LIKE
'%,myval
,%'or
mycol
or
LIKE
'%,myval
'
使用instr
函数:instr
匹配字符串但只匹配第一次出现。
例如:select * from A where instr ('123' ,'12')
使用In
:search
中的这个String
。但不能单独匹配值。
我尝试过像文档Here
所以我的问题有一种方法,而不是使用search
运算符或string
函数单独搜索列中的Like
In
。我可以在单query
内搜索我的值值,例如In
和Any
的组合(Sqlite
} function
不支持} Db
}
i.e
select * from A where Any('my search string') in ('my column value')
任何答案或评论都是高度赞赏的。希望得到回复。
答案 0 :(得分:2)
您遇到问题,因为您的数据库未正确规范化。
要为每个MyTable
行设置多个搜索ID,请创建一个可以包含多行的第二个表,每行中包含一个搜索ID:
CREATE TABLE MyTable (
MyTableID INTEGER PRIMARY KEY,
[...]
);
CREATE TABLE MyTableSearchIDs (
MyTableID INTEGER REFERENCES MyTable(MyTableID),
SearchID INTEGER -- or TEXT or whatever
);
要搜索MyTable
行,请先搜索其ID:
SELECT *
FROM MyTable
WHERE MyTableID IN (SELECT MyTableID
FROM MyTableSearchIDs
WHERE SearchID = 'myvalue')
使用连接也可以这样做:
SELECT MyTable.*
FROM MyTable
JOIN MyTableSearchIDs USING (MyTableID)
WHERE MyTableSearchIDs.SearchID = 'myvalue'