令我惊讶的是,以下两个查询返回了不同的结果:
SELECT * FROM foo JOIN bar ON bar.id=foo.bar_id JOIN baz ON baz.id=foo.baz_id LEFT JOIN zig ON zig.foo_id=foo.id;
和:
SELECT * FROM foo LEFT JOIN zig ON zig.foo_id=foo.id JOIN bar ON bar.id=foo.bar_id JOIN baz ON baz.id=foo.baz_id;
我想象当你在zig上LEFT JOIN时无所谓,因为我在加入bar和baz时没有使用zig的列.然而,似乎在后者中,bar和baz的JOIN-ing吞噬了zig具有空值的行…为什么?
解决方法
这很好用.我错了.