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

标签 mysql sql left-join

我有一个 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/

相关文章:

mysql - 如何使用子查询计算同一个表中的特定字段的数量并为这些子查询分配特定名称以获取数据

MySql + Qt 5.8 : "Incorrect string value" Statement Containing Degree Symbol

sql - MySQL IN 运算符

mysql - 使用 LEFT JOIN 未获得空值的预期结果

SQL:左连接三个表

mysql - 如何访问本地网络中的Docker容器?

c# - 如何将 MySql 的返回数据分配给 C# 变量?

php - 未创建 MySQL 和 PHP 表

php - 按其他表中的标题对结果进行分组

MySQL COUNT IF 不工作并给出全 0