我有一个 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 ver 4.x 这工作正常,它正确地抓取名称,只选择非 Null 列。但是在使用MySQL 5.x 时,总是显示NULL。如果我执行 SELECT,分别取出 s1.school_name、s2.school_name 等,我可以很好地看到非 NULL 列,但使用 GREATEST 不起作用。
知道发生了什么事吗?这是我在整个程序中经常使用的 MySQL 代码的一个非常重要的部分。
最佳答案
greatest()
在这里似乎是一个奇怪的选择。在任何情况下,从 5.0 左右版本开始,如果 任何 值是 NULL
,它都会返回 NULL
。
也许这就是您真正想要的:
SELECT COALESCE(s1.school_name, s2.school_name, s3.school_name) as `school`,
这将返回第一个非 NULL 值。
关于MySQL - GREATEST() 和 LEFT JOIN 返回 NULL 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29848892/