Левое внешнее соединение (соединение трех таблиц)? - PullRequest
1 голос
/ 17 ноября 2008

У меня есть главная таблица, из которой я должен получить данные. У меня есть левое внешнее соединение, где поля будут соответствовать 40% времени. А затем у меня есть еще одно объединение, где мне нужно сопоставить данные из таблицы А. с

Это SQL в псевдокоде. Этот запрос не будет работать.

- Это та часть, которую я хочу сделать, но она не работает. AND H.COL3 = A.STATE ????

Я работаю с IBM DB2.

SELECT DISTINCT
  APP_NO as app_no,
  A.STATE as state
  ...
  ... Fields
  ...
FROM 
  TABLE_A A
LEFT OUTER JOIN  
  TABLE_B HIST
ON
  HIST.COL1 = A.COL1
, TABLE_C B  
LEFT OUTER JOIN
  TABLE_D H  
ON
  H.COL2 = B.COL2
-- This is the part I want to do but doesn't work.
AND
  H.COL3 = A.STATE????
WHERE
  A.BRANCH = 'Data'

Ответы [ 2 ]

13 голосов
/ 17 ноября 2008

Я думаю, что вы могли бы переписать это так (но я могу неправильно прочитать ваше утверждение)

FROM 
  TABLE_A A LEFT OUTER JOIN TABLE_B HIST ON
      HIST.COL1 = A.COL1
  LEFT OUTER JOIN TABLE_D H ON 
      H.COL3 = A.STATE
  LEFT OUTER JOIN TABLE_C B ON H.COL2 = B.COL2
WHERE
  A.BRANCH = 'Data'

Также в документации IBM об этой ошибке говорится:

Предложение ON, связанное с оператором JOIN или в операторе MERGE, недопустимо. Объяснение:

Ссылки на столбцы в предложении ON должны ссылаться только на столбцы таблиц, которые находятся в области действия предложения ON.

Так что я могу ошибаться, это просто выглядит как ошибочное предложение ON, когда внешнее соединение "H.COL3 = A.STATE" выходит за рамки предложения On, поскольку таблица A не входит в эту область.

0 голосов
/ 17 ноября 2008

Что произойдет, если вы добавите "AND H.COL3 = A.STATE" в предложение WHERE?

...