MySQL - GREATEST() 和 LEFT JOIN 返回 NULL 的问题

MySQL - Issue with GREATEST() and LEFT JOIN returning NULL

我对 GREATEST() 和 LEFT JOIN 语句有疑问,看起来它与 MySQL 的不同版本有关。我有一个存储 school_id 和 school_type 的 table。有 4 种学校类型,对于每种学校类型,我都有单独的 table。我有一个查询将根据学校类型从单独的 table 中提取所有学校名称。所以我们有以下 tables:

tbl_report(存储学校 ID 和类型的列表) tbl_grad_school tbl_lang_school tbl_high_school

MySQL 语句将提取学校名称(相对于学校类型,加上 tbl_report 中的一些其他详细信息。所以这是我所拥有的:

SELECT
GREATEST(s1.school_name, s2.school_name, s3.school_name) as `school`,
tbl_report.school_id,
tbl_report.school_type,
tbl_report.date,

FROM  tbl_report

LEFT JOIN tbl_grad_school AS s1 ON tbl_report.school_id=s1.id AND tbl_report.school_type=1
LEFT JOIN tbl_lang_school AS s2 ON tbl_report.school_id=s2.id AND tbl_report.school_type=2
LEFT JOIN tbl_high_school AS s3 ON tbl_report.school_id=s3.id AND tbl_report.school_type=3

问题是

GREATEST(s1.school_name, s2.school_name, s3.school_name) as `school`

当使用 MySQL ver 4.x 这工作正常,它正确地抓取名称,只选择非 Null 列。但是当使用MySQL 5.x时,总是显示NULL。如果我分别执行 SELECT、拉出 s1.school_name、s2.school_name 等,我可以很好地看到非 NULL 列,但使用 GREATEST 不起作用。

知道发生了什么事吗?这是我在整个程序中经常使用的 MySQL 代码的一个非常重要的部分。

greatest() 在这里似乎是一个奇怪的选择。在任何情况下,从 5.0 左右版本开始,它 returns NULL 如果 any 的值是 NULL.

也许这就是您真正想要的:

SELECT COALESCE(s1.school_name, s2.school_name, s3.school_name) as `school`,

这是 returns 第一个非 NULL 值。