Несколько внешних соединений в одном запросе - PullRequest
1 голос
/ 23 ноября 2010

Я хочу сделать несколько внешних объединений на столе с 3 другими.Объединение является нидекларацией.Цель состоит в том, чтобы получить объявление со всем, что связано с ним в моей схеме.Существующий код выполнял одно внешнее соединение со старым синтаксисом: где Ax = Bx (+).«Новый» синтаксис левого внешнего соединения, кажется, делает то же самое.Моя проблема состоит в том, чтобы использовать его несколько раз в одном запросе.Кажется, я не могу использовать уникальный идентификатор 'объявление d', поэтому я использую 3 дифференциала, чтобы сделать то же самое вместо одного.

select * 
  FROM entreprise e, 
       calendrier m, 
       statut s, 
       lignedeclaration l, 
       categoriedeclaration c, 
       declaration d left OUTER JOIN saisiecategoriedeclaration sc on d.niddeclaration = sc.niddeclaration ,
       declaration de left OUTER JOIN saisielignedeclaration sl on de.niddeclaration = sl.niddeclaration,
       declaration dl left OUTER JOIN reglement r on dl.niddeclaration = r.niddeclaration
 WHERE (d.nidentreprise = e.nidentreprise) 
   AND d.niddeclaration = 12314689 
   and de.niddeclaration = 12314689 
   and dl.niddeclaration = 12314689;

Короче говоря, я хочу сделать 2 нормальных соединения и3 внешних соединения в одном запросе.С 3 внешним соединением с той же «левой» таблицей.

1 Ответ

4 голосов
/ 23 ноября 2010

Вам не нужно повторно включать declaration.

declaration d
left OUTER JOIN saisiecategoriedeclaration sc on d.niddeclaration = sc.niddeclaration
left OUTER JOIN saisielignedeclaration sl on d.niddeclaration = sl.niddeclaration
left OUTER JOIN reglement r on d.niddeclaration = r.niddeclaration

Обратите внимание на пропуск запятых. Вам также может понадобиться переписать другие таблицы в запросе, чтобы использовать современный синтаксис объединения, я не уверен, что произойдет, если вы попытаетесь смешать синтаксис.

...