这个问题在这里已有答案:
我试图运行一个类似下面的语句的查询,但要么我无法弄清楚正确的语法或它是不可行的:
SELECT
id, first_name, last_name,
concat(first_name,' ',last_name) AS full_name
FROM mytable
WHERE full_name LIKE '%scott%'
这是什么?如果可行,我可以在语法上获得一点帮助吗?
您不能在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%'
我可以想到有几种方法可以做到这一点:
LIKE
分别对first_name
和last_name
列运行OR
,或者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%'
。
我个人会使用第二种解决方案,因为我相信它会更有效率,而且我认为它看起来更具代表性。他们都会工作,所以这取决于你。