【问题标题】:Right and Left Join Together in SQLSQL中的左右连接在一起
【发布时间】:2019-05-20 17:45:45
【问题描述】:

我正在尝试同时使用 RIGHT 和 LEFT Join。我只有在加入一张桌子时才能工作。但我现在正试图在我的左连接中包含另一个表。它给了我一个错误,说我缺少一个操作员。我在哪里缺少括号?

FROM qSplit RIGHT JOIN (t_i360_agent AS i LEFT JOIN cmsAgent_Split AS c 
ON ((i.LocalDay = c.LocalDay) AND (i.ACDID = c.LOGID)) 
LEFT JOIN qry_AllNewtables as qry ON (qry.custConvDate = c.LocalDay)
AND (qry.CustAgentLoginName = i.Loginname)  ) ON qSplit.SPLIT = c.SPLIT

【问题讨论】:

  • 为您的 DBMS 提供 SQL 问题 - 正如您在标记您的问题时被明确告知的那样。请在代码问题中提供minimal reproducible example--cut & paste & runnable code;具有期望和实际输出的示例输入(包括逐字错误消息);明确的规范和解释。这包括您可以提供的最少代码,即您显示的代码可以通过您显示的代码扩展为不可以。 (调试基础。) PS 这段代码是无效的,那么我们怎么知道你想要它做什么呢?在描述结果时:充分说明某人可以离开并带着解决方案回来。
  • 请格式化代码(包括缩进)以反映任何语言的语义(包括括号)。

标签: sql join left-join right-join


【解决方案1】:

不要同时使用LEFT JOINRIGHT JOIN。我想在某个地方可能会有一个有意义的查询。在实践中,我认为我从来没有在同一个查询中使用过它们,可能是因为我使用 LEFT JOIN 编写查询。

如果您想要agent 表中的所有内容,请先制作!并使用left join;

FROM t_i360_agent i LEFT JOIN
     cmsAgent_Split c 
     ON i.LocalDay = c.LocalDay AND i.ACDID = c.LOGID LEFT JOIN 
     qry_AllNewtables qry
     ON qry.custConvDate = c.LocalDay AND 
        qry.CustAgentLoginName = i.Loginname LEFT JOIN
     qSplit
     ON qSplit.SPLIT = c.SPLIT

以这种方式更容易遵循查询的意图。您从您认为非常重要以至于想要保留所有数据的数据开始,即使JOINs 没有匹配的行。

【讨论】:

    【解决方案2】:

    除了 Gordon 的建议之外,问题是您错过了 RIGHT JOIN 的连接条件,一旦我重新格式化查询,很容易看到丢失的内容。

    FROM qSplit 
    RIGHT JOIN t_i360_agent AS i 
      -- Need join condition
    LEFT JOIN cmsAgent_Split AS c 
      ON (i.LocalDay = c.LocalDay) 
     AND (i.ACDID = c.LOGID)) 
    
    LEFT JOIN qry_AllNewtables as qry 
      ON (qry.custConvDate = c.LocalDay)
     AND (qry.CustAgentLoginName = i.Loginname) 
    

    【讨论】:

    • qSplit.SPLIT = c.SPLIT 的类似物在哪里? PS 或者括号是正确的,错误在别处。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    • 2016-12-13
    • 1970-01-01
    • 2014-01-01
    • 2018-01-21
    • 1970-01-01
    相关资源
    最近更新 更多