每列的 SQLite WHERE 子句?

问题描述 投票:0回答:5

SQLite 是否提供了一种在表的每一列中搜索搜索键的方法?

SELECT * FROM table WHERE id LIKE ...

选择在

...
列中找到
id
的所有行。但我只想在每一列中搜索是否找到了搜索字符串,而不是只在
id
列中搜索。我相信这行不通:

SELECT * FROM table WHERE * LIKE ...

这可能吗?或者下一个简单的方法是什么?

我使用Python 3来查询SQLite数据库。执行查询并返回数据后是否应该走字典搜索的路线?

sql sqlite
5个回答
11
投票

您可以做的一个简单技巧是:

SELECT *
FROM table
WHERE ((col1+col2+col3+col4) LIKE '%something%')

如果这 4 列中的任何一列包含单词“something”,这将选择记录。


2
投票

我无法评论@raging-bull 的回答。所以我必须写一篇新的。我的问题是,我有包含

null
值的列,但没有得到结果,因为“搜索字符串”是
null

使用合并我可以解决这个问题。这里 sqlite 选择列内容,或者如果是

null
则选择空字符串(“”)。所以有一个实际的搜索字符串可用。

SELECT *
FROM table
WHERE (coalesce(col1,"") || coalesce(col2,"") || coalesce(col3,"") || coalesce(col4,"")) LIKE '%something%')

1
投票

不;您必须列出或连接查询中的每一列,或者重新组织数据库以减少列数。

SQLite 具有 全文搜索表,您可以在其中一次搜索所有列,但此类表不能与任何其他查询有效地配合使用。


0
投票

从表中选择*,其中 col1 ||列2 || col3 就像 '%something%';


-1
投票

我不太确定我是否理解你的问题。 如果你想返回整行,当 id=searchkey 时,那么:

select * from table where id=searchkey;

如果您想从具有正确搜索键的行中获取特定列:

select col1, col2, col3 from table where id=searchkey;

如果您想在多个列中搜索“id”:首先缩小可以在哪些列中找到的范围 - 您不想搜索整个表!然后:

select * from table where col1=searchkey or col2=searchkey or col3=searchkey;
© www.soinside.com 2019 - 2024. All rights reserved.