0

クエリを次のように書くと、次のような問題が発生します。

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 は異常な方法で外部結合を実装していますか?

4

1 に答える 1

0

c.nとのd.n値が何であるかを理解したいと思うかもしれません。このようなことを試して、出発点がどこにあるかを把握してください。

SELECT c.n, d.n, count(*)
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
group by c.n, d.n

次に、結果に基づいてクエリを調整できます

于 2013-03-26T15:53:40.770 に答える