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

Posted

技术标签:

【中文标题】mysql查询针对concat的LIKE条件[重复]【英文标题】:mysql query LIKE condition against a concat [duplicate] 【发布时间】: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%'

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

【问题讨论】:

【参考方案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】:

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

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

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

【讨论】:

以上是关于mysql查询针对concat的LIKE条件[重复]的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL join using like and get concat function

Oracle Java Concat Like with Arguments [重复]

mybatis : trim标签, “等于==”经验, CDATA标签 ,模糊查询CONCAT,LIKE

mysql UNION 有重复的数据,怎么解决

oracle like模糊查询 concat的使用

oracle like模糊查询 concat的使用