sql join返回null值的字段

时间:2016-11-29 14:27:18

标签: mysql sql join

我有以下查询:

SELECT *
FROM tableA.A 
LEFT JOIN tableB AS B ON B.id=A.id 
LEFT JOIN tableC AS C ON C.id=A.id2 
LEFT JOIN tableD AS D ON D.id=A.id3 
WHERE D.id = '124' AND A.field = 1 
GROUP BY A.id ORDER BY D.sortorder

上面的结构与我的真实查询是一致的,我想提一下我在查询中使用的所有表都是有效的,并且行用数字和字母字符填充。任何地方都没有NULL值。

问题是,在执行此查询后,它返回一些具有NULL值的字段,即使它们不为空。

我试着解释尽可能好,但这是一种奇怪的行为,我在谷歌上找不到任何东西。

如果这不是一个常见的问题并且很难找到错误,也许一些建议可以帮助我找到错误。

提前谢谢

更新我想道歉。问题是由表A上的输入结果引起的,这就是为什么它返回NULL,因为实际上没有匹配。谢谢你的帮助

1 个答案:

答案 0 :(得分:1)

尝试此查询:

SELECT *
FROM tableA.A 
LEFT JOIN tableB AS B ON B.id=A.id 
LEFT JOIN tableC AS C ON C.id=A.id2 
LEFT JOIN tableD AS D ON D.id=A.id3 and D.id = '124'
WHERE A.field = 1 
GROUP BY A.id
ORDER BY COALESCE(D.sortorder,0)

LEFT JOIN右表上的条件应放在ON子句中,而不是WHERE子句中。

如果这也不起作用,那么我误解了LEFT JOIN的目的。它用于保存主表中的所有记录(在您的情况下为A)和丢弃所有与详细信息表不匹配的数据,因此,那里当没有匹配时,它将是NULL值。