【发布时间】: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 代码的一个非常重要的部分。
【问题讨论】: