搜索第一个,中间名和姓氏的所有组合

时间:2017-05-08 01:30:34

标签: mysql sql

在我的数据库中有一个名为author的表,其中包含4列:

  • AUTHORID
  • 的firstName
  • 中间名
  • lastName的

例如,用户正在搜索Edgar Allan Poe。在我们的表格中,Edgar Allan Poe保存为: firstName - Edgar, middleName - Allan和 lastName - Poe。这个查询非常简单。但是如何编写一个不仅与Edgar Allan Poe相匹配的查询,还包括Poe Allan Edgar,Edgar Poe,Allan Poe,Edgar Allan,Allan Edgar Poe,而我们自己并没有编写所有这些可能的组合?此外,当用户搜索时,他/她完全搜索“Edgar Allan Poe”或“Poe Allan Edgar”,而不是在单独的字段中搜索。

2 个答案:

答案 0 :(得分:3)

在任何数据库中,您都可以执行以下操作:

where firstName in ('Edgar', 'Allan', 'Poe') and
      middleName in ('Edgar', 'Allan', 'Poe') and
      middleName <> firstName and
      lastname in ('Edgar', 'Allan', 'Poe') and
      lastname not in (firstname, middleName)

如果您愿意,这实际上很容易扩展到更多名称 - 假设名称与您的示例中的名称不同(如果您想允许具有重复名称的作者,只需从上面的查询中删除第3行和第5行)

但是,根据您的数据库,您可能希望使用正则表达式或全文搜索。

答案 1 :(得分:0)

对于通用DBMS,假设您的意图只是简化查询,一种方法是在作者表中添加一个单独的计算列,一个在插入和更新时触发。

换句话说,有一个名为searchFullName的clumn并将其设置为:

<space><firstName><space><secondName><space><lastName><space>

然后你的查询变得(相对)简单:

select something from author
where searchFullName like '% Poe %'
  and searchFullName like '% Edgar %'

对于大型表来说它不会很快,但它应该达到你想要的效果。

相关问题