如何在MySQL中使用CONCAT的别名?

如何在MySQL中使用CONCAT的别名?,mysql,Mysql,我需要返回一个别名列eventTitle,其内容可以根据另一列的值是否为null而变化。我还需要使用该别名的值来连接其他一些值,以返回另一个别名title 我正在运行以下查询: $sql = 'SELECT CASE WHEN session.title IS NOT NULL THEN session.title ELSE course.title END AS eventTitle, CONCAT(e

我需要返回一个别名列
eventTitle
,其内容可以根据另一列的值是否为
null
而变化。我还需要使用该别名的值来连接其他一些值,以返回另一个别名
title

我正在运行以下查询:

$sql = 'SELECT
        CASE WHEN session.title IS NOT NULL
           THEN session.title
           ELSE course.title
        END AS eventTitle,
        CONCAT(eventTitle, "\n", session.city, ", ", session.state) AS title,
        FROM session
        LEFT JOIN course ON course.id = session.course_id';
我得到以下错误:

“字段列表”中的未知列“eventTitle”


不能在同一
SELECT
子句中引用列别名。将其放入子查询中。此外,您可以使用
IFNULL
(或更标准的
合并
)而不是
CASE

或者您可以在同一个查询中使用
IFNULL
两次

SELECT IFNULL(session.title, course.title) AS eventTitle,
       CONCAT(IFNULL(session.title, course.title), "\n", session.city, ", ", session.state) AS title
FROM session
LEFT JOIN course ON course.id = session.course_id

顺便说一句,我想你要么有空检查要么
左连接
向后。使用
LEFT JOIN
时,如果没有匹配项,则第二个表的列中会出现
NULL
。因此,
NULL
列将是
course.title
,而不是
session.title

感谢您的反馈。不幸的是,当我尝试运行时,我在“字段列表”中得到了“session.city”的
Unknown列。
抱歉,修复了它。需要从子查询返回这些列。是的,这确实有效。我认为第二种方法更容易遵循。谢谢是的,当计算非常复杂时,我通常使用第一种方法。如果没有
IFNULL
函数,那么我必须编写
CASE
表达式,我会这样做。
SELECT IFNULL(session.title, course.title) AS eventTitle,
       CONCAT(IFNULL(session.title, course.title), "\n", session.city, ", ", session.state) AS title
FROM session
LEFT JOIN course ON course.id = session.course_id