选择具有多个“where”字段的语句,使用相同的值而不复制文本

时间:2010-03-11 20:37:29

标签: sql sqlite

我首先会说我不认为我想做什么,但是说,我希望我错了,有人比我更了解。所以这是你的机会......证明你比我聪明:)

我想针对SQLite表进行搜索,查找“相似”的任何记录,而不必长时间写出查询。

为了澄清这是我知道我可以编写查询的方式:

select * from Articles where title like '%Bla%' or category like '%Bla%' or post like '%Bla%'

如果你只是检查几个列,这是有效的,并不是一个大问题,但如果你需要检查一堆,那么你的查询可以变得非常冗长和讨厌看起来非常快,更不用说有机会错别字。 (即:'Bla%'而不是'%Bla%')

我想知道的是,如果有这么简单的方法吗?

*下一个代码不能按照我想要的方式工作,但只是显示了我正在寻找的东西

select * from Articles where title or category or post like '%Bla%'

任何人都知道是否有办法指定多个“where”列应使用相同的搜索值而不为每列列出相同的搜索值?

提前致谢!

3 个答案:

答案 0 :(得分:4)

我认为你考虑使用sqlite,你应该考虑使用全文搜索。它会让你尝试提高效率。

http://www.sqlite.org/cvstrac/wiki?p=FtsUsage

答案 1 :(得分:0)

我能想到的最快的事情是连接标题,类别和帖子,看看连接的字符串是否匹配'%Bla%'。为了使这个工作可靠,在连接时使用像','这样的分隔符(否则,你可以将标题'Bl'和笼子'a')。

我不知道在我的脑海中,在SQL中调用串联运算符是什么,我不确定,如果在通用SQL或SQLite中存在。

我的想法是,它看起来像是:

select * from Articles where concat(title, ',', category, ',', post) like '%Bla%'

答案 2 :(得分:0)

也许你想将你的字段连接成一个字符串,然后对着那个?

select * from Articles where (title || ';' || category || ';' || post) like '%Bla%'

中间的分号是任意的,可以确保“ROB”和“长矛”不会带来误报。

如果您不想提供字段,那就更复杂了......