【问题标题】:mysql query LIKE condition against a concat [duplicate]mysql查询针对concat的LIKE条件[重复]
【发布时间】:2019-01-28 00:00:07
【问题描述】:

我正在尝试运行类似于以下语句的查询,但要么我无法找出正确的语法,要么它不可行:

SELECT 
    id, first_name, last_name, 
    concat(first_name,' ',last_name) AS full_name
FROM mytable 
WHERE full_name LIKE '%scott%'

这是什么?如果可行,我可以在语法上获得一点帮助吗?

【问题讨论】:

    标签: mysql sql string where-clause sql-like


    【解决方案1】:

    您不能在WHERE 子句中使用在SELECT 子句中计算的字段,因为大多数(如果不是全部)RDBMS 在SELECT 之前评估WHERE 子句。

    你可能想要:

    SELECT 
        id, first_name, last_name, 
        CONCAT(first_name,' ',last_name) AS full_name
    FROM mytable 
    WHERE CONCAT(first_name,' ',last_name) LIKE '%scott%'
    

    也可以这样表达:

    SELECT 
        id, first_name, last_name, 
        CONCAT(first_name,' ',last_name) AS full_name
    FROM mytable 
    WHERE first_name LIKE '%scott%' OR last_name like '%scott%'
    

    【讨论】:

      【解决方案2】:

      我能想到的有几种方法可以做到这一点:

      1. 您可以使用OR 分别针对first_namelast_name 列运行LIKE,或者
      2. 您可以先使用子查询来连接字段,或者
      3. 您可以对连接的字段运行 LIKE

      对于第一个解决方案:

      SELECT  id,
              first_name,
              last_name,
              concat(first_name,' ',last_name) AS full_name
        FROM  mytable
        WHERE (first_name LIKE '%scott%' OR
              last_name LIKE '%scott%');
      

      对于第二种解决方案:

      SELECT  *
        FROM  (
              SELECT  id,
                      first_name,
                      last_name,
                      concat(first_name,' ',last_name) AS full_name
                FROM  mytable
              ) a
        WHERE full_name LIKE '%scott%';
      

      第三个涉及包括WHERE CONCAT(...) LIKE '%scott%'

      我个人会使用第二种解决方案,因为我相信它会更有效,而且我认为它看起来更美观。不过,它们都会起作用,所以这取决于你。

      【讨论】:

        猜你喜欢
        • 2013-05-16
        • 2011-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-21
        • 2014-10-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多