首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Where和Right/Left连接

Where和Right/Left连接
EN

Stack Overflow用户
提问于 2017-11-14 19:50:19
回答 1查看 64关注 0票数 0
代码语言:javascript
运行
复制
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;
EN

回答 1

Stack Overflow用户

发布于 2017-11-14 19:58:23

我不是RIGHT JOIN的粉丝。我认为LEFT JOIN更清晰(将所有内容保存在first表中,而不是last表中)。在任何情况下,您的问题都是WHERE子句正在撤消RIGHT JOIN

我会这样写:

代码语言:javascript
运行
复制
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.
  • The,不需要子查询
  • 原始WHERE条件现在在ON子句中。
  • 调换了JOIN的顺序,并将第二个条件切换为code

此外,此逻辑与您的逻辑也不完全相同。当3个表中有2个匹配时,会有细微的差异。我怀疑这是否会对您想要的结果有所不同。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47285107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档