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_name
和last_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 [重复]