代码之家  ›  专栏  ›  技术社区  ›  Paddy Hallihan

SQL是否使用like%搜索多个列?%

  •  0
  • Paddy Hallihan  · 技术社区  · 6 年前

    我有一个包含列的用户数据库 first_name', 'last_name' & 'email .

    然后我尝试用 SQL 就像这样:

    SELECT * 
    FROM customers 
    WHERE email LIKE %?% OR 
          first_name LIKE %?% OR 
          last_name LIKE %?%";
    

    所以说我的数据库中这些列的数据是:

    table tr td{
      padding:5px;
    }
    
    <table border="1">
    <tr><td>first_name</td><td>last_name</td><td>email</td></tr>
    <tr><td>test</td><td>user</td><td>user@test.com</td></tr>
    </table>
    

    在这种情况下,我可以搜索 'test' 或者我可以搜索 'user' 得到正确的结果,但如果我搜索 'test user' 没有结果。

    在这样的多列中进行搜索的最佳方法是什么,其中搜索字符串的一部分可能在一列中,另一列中只有一部分。

    1 回复  |  直到 6 年前
        1
  •  1
  •   MatBailie    6 年前

    您需要另一个查询。没有办法表达 LIKE 具有多个输入参数。

    所以,你可以把你所有的搜索词放在一张表格里,沿着这些线…

    SELECT
      *
    FROM
      customers
    INNER JOIN
    (
                SELECT '%test%'   AS param
      UNION ALL SELECT '%user%'
    )
      AS search
        ON customers.email      LIKE search.param
        OR customers.first_name LIKE search.param
        OR customers.last_name  LIKE search.param
    

    (或者您可以创建一个实际的表,而不是使用内联视图。)