mysql 针对 concat 查询 LIKE 条件

mysql query LIKE condition against a concat

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

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

这是哪个?如果可行的话,我能得到一些语法方面的帮助吗?

您不能在 WHERE 子句中使用在 SELECT 子句中计算的字段,因为大多数(如果不是全部)RDBMS 在 [=12= 之前评估 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%'

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

  1. 您可以使用 OR
  2. 分别针对 first_namelast_name 列 运行 LIKE
  3. 您可以先使用子查询连接字段,或者
  4. 您可以 运行 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%'

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