右手和左手在 SQL 中连接在一起

Right and Left Join Together in SQL

我正在尝试同时使用 RIGHT 和 LEFT Join。我只剩下加入一个 table 时就可以正常工作。但我现在正尝试在我的左连接中包含另一个 table 。它给了我一个错误,说我缺少一个操作员。我哪里漏了括号?

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

不要同时使用 LEFT JOINRIGHT JOIN。我想在某个地方可能会有一个有意义的查询。实际上,我不认为我曾经在同一个查询中同时使用过它们,可能是因为我使用 LEFT JOIN.

编写查询

如果agenttable里的都想要,那就先来吧!并使用 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

这样更容易理解查询的意图。您从您认为非常重要以至于想要保留所有数据的数据开始,即使 JOIN 没有匹配的行。

除了 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)