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%'
我认为有几种方法可以做到这一点:
- 您可以使用
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%'
。
我个人会使用第二种解决方案,因为我认为它会更有效率,而且我认为它看起来更像样。不过它们都会起作用,所以这取决于您。
我正在尝试 运行 类似于以下语句的查询,但要么我无法找出正确的语法,要么它不可行:
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%'
我认为有几种方法可以做到这一点:
- 您可以使用
OR
或 分别针对 - 您可以先使用子查询连接字段,或者
- 您可以 运行
LIKE
针对串联字段。
first_name
和 last_name
列 运行 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%'
。
我个人会使用第二种解决方案,因为我认为它会更有效率,而且我认为它看起来更像样。不过它们都会起作用,所以这取决于您。