クエリを次のように書くと、次のような問題が発生します。
SELECT a.v, b.w, c.x, d.y, e.z
FROM a
JOIN b
on a.id = b.id
LEFT JOIN c
on a.id = c.id
LEFT JOIN d
on b.code=d.code
JOIN e
on a.n = e.n
WHERE
a.zone = 10
WITH (nolock)
数百の結果が得られますが、これを次のように変更すると:
SELECT a.v, b.w, c.x, d.y, e.z
FROM a
JOIN b
on a.id = b.id
LEFT JOIN c
on a.id = c.id AND c.n = 0
LEFT JOIN d
on b.code=d.code AND d.n = 0
JOIN e
on a.n = e.n
WHERE
a.zone = 10
WITH (nolock)
ゼロの結果が得られます。
SQL と左結合に関する私の理解から、最初のクエリで結果を取得するということは、c と d のフィールドが null である場合にのみ、2 番目のクエリで少なくとも 1 つの結果を取得する必要があることを意味すると感じています。PROGRESS は異常な方法で外部結合を実装していますか?