SELECT pcm.clacta,
pcm.descta,
pcm.ctared,
SUM(mcp.vlrliq)
FROM e501tcp tcp
INNER JOIN e501mcp mcp ON mcp.codemp = tcp.codemp
AND mcp.codfil = tcp.codfil
AND mcp.numtit = tcp.numtit
AND mcp.codtpt = tcp.codtpt
AND mcp.codfor = tcp.codfor
RIGHT JOIN (SELECT pcm.clacta,
pcm.descta,
pcm.ctared
FROM e043pcm pcm
WHERE pcm.codmpc = 700) pcm ON pcm.ctared = tcp.ctafin
WHERE tcp.codfil = 1
AND tcp.numtit = '1/01'
GROUP BY pcm.clacta,
pcm.descta,
pcm.ctared
ORDER BY pcm.clacta;发布于 2017-11-14 19:58:23
我不是RIGHT JOIN的粉丝。我认为LEFT JOIN更清晰(将所有内容保存在first表中,而不是last表中)。在任何情况下,您的问题都是WHERE子句正在撤消RIGHT JOIN。
我会这样写:
SELECT pcm.clacta,
pcm.descta,
pcm.ctared,
SUM(mcp.vlrliq)
FROM e043pcm pcm LEFT JOIN
e501tcp tcp
ON pcm.ctared = tcp.ctafin AND
tcp.codfil = 1 AND
tcp.numtit = '1/01' LEFT JOIN
e501mcp mcp
ON mcp.codemp = tcp.codemp AND
mcp.codfil = tcp.codfil AND
mcp.numtit = tcp.numtit AND
mcp.codtpt = tcp.codtpt AND
mcp.codfor = tcp.codfor
WHERE pcm.codmpc = 700
GROUP BY pcm.clacta, pcm.descta, pcm.ctared
ORDER BY pcm.clacta;备注:
pcm上的条件可以在WHERE子句中。对于pcm.WHERE条件现在在ON子句中。JOIN的顺序,并将第二个条件切换为code此外,此逻辑与您的逻辑也不完全相同。当3个表中有2个匹配时,会有细微的差异。我怀疑这是否会对您想要的结果有所不同。
https://stackoverflow.com/questions/47285107
复制相似问题