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 的字段为空的结果。PROGRESS 是否以不寻常的方式实现外部连接?

4

1 回答 1

0

您可能想弄清楚c.nd.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 回答