【问题标题】:MySQL - Issue with GREATEST() and LEFT JOIN returning NULLMySQL - GREATEST() 和 LEFT JOIN 返回 NULL 的问题
【发布时间】:2015-04-24 21:34:54
【问题描述】:

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

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 4.x 版时,它可以正常工作,它正确地获取名称,只选择非 Null 列。但是在使用 MySQL 5.x 时,总是显示 NULL。如果我执行 SELECT,分别拉出 s1.school_name、s2.school_name 等,我可以看到非 NULL 列正常,但使用 GREATEST 不起作用。

任何想法发生了什么?这是我在整个程序中经常使用的 MySQL 代码的一个非常重要的部分。

【问题讨论】:

    标签: mysql sql left-join


    【解决方案1】:

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

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

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

    这将返回第一个非 NULL 值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-25
      • 2021-02-09
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多