我有以下查询:
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,因为实际上没有匹配。谢谢你的帮助
答案 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
值。