mysql查询LIKE条件反对concat [重复]

问题描述 投票:0回答:2

这个问题在这里已有答案:

我试图运行一个类似下面的语句的查询,但要么我无法弄清楚正确的语法或它是不可行的:

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

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

mysql sql-like concat
2个回答
1
投票

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

你可能想要:

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%'

0
投票

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

  1. 您可以使用LIKE分别对first_namelast_name列运行OR,或者
  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%'

我个人会使用第二种解决方案,因为我相信它会更有效率,而且我认为它看起来更具代表性。他们都会工作,所以这取决于你。

© www.soinside.com 2019 - 2024. All rights reserved.