Правое и левое объединяются в SQL - PullRequest
0 голосов
/ 20 мая 2019

Я пытаюсь использовать ПРАВО и ЛЕВОЕ Объединение. У меня это работает, когда остается только присоединиться к одному столу. Но сейчас я пытаюсь включить другую таблицу в мое левое соединение. Это дает мне ошибку, говоря, что я скучаю по оператору. Где мне не хватает скобок?

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

Ответы [ 2 ]

1 голос
/ 20 мая 2019

Не используйте LEFT JOIN и RIGHT 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

Намного легче следовать намерению запроса таким образом.Вы начинаете с данных, которые вы считаете настолько важными, что хотите сохранить их все, даже если у JOIN нет соответствующих строк.

0 голосов
/ 20 мая 2019

Помимо предложения Гордона, проблема заключалась в том, что вы пропустили условие соединения для 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) 
...