代码之家  ›  专栏  ›  技术社区  ›  kdbdallas

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

  •  1
  • kdbdallas  · 技术社区  · 14 年前

    我首先会说,我不认为我想要的能做,但那就是说,我希望我是错的,有人比我更了解我。所以这是你的机会…证明你比我聪明。)

    我想对一个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 回复  |  直到 14 年前
        1
  •  4
  •   Keith Adler    14 年前

    我认为考虑到您使用的是sqlite,您应该考虑使用全文搜索。这会使你想做的更有效率。

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

        2
  •  0
  •   Chris Lercher    14 年前

    我能想到的最快的事情是连接标题、类别和文章,看看连接的字符串是否与“%bla%”匹配。要使其可靠工作,请在连接时使用类似“,”的分隔符(否则,可以使用标题“bl”和cagegory“a”)。

    我不知道在我的头上,连接操作符在SQL中被称为什么,我也不确定通用SQL或sqlite中是否存在连接操作符。

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

    select * from Articles where concat(title, ',', category, ',', post) like '%Bla%'
    
        3
  •  0
  •   LesterDove    14 年前

    也许你想把你的字段连接成一个字符串,然后像这样做?

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

    中间的分号是任意的,用来确保“rob”和“lance”不会带来假阳性。

    如果你不想提供这些字段,那就更复杂了…