SQL Соединение трех таблиц и использование LEFT OUTER JOIN - PullRequest
0 голосов
/ 19 марта 2012

У меня есть три таблицы и два отдельных SQL-запроса, которые работают правильно, и у меня правильные результаты.Если я попытаюсь присоединиться к этим трем таблицам, у меня будет нулевой результат.

Первый запрос:

select T1.ID,T3.COMPANY
from T1,T3
where (T1.status!='CLOSED') and (T1.PRIORITY)>5 and T1.CLASSID=T3.CLASSID

Второй запрос:

SELECT T1.ID, T2.DESCRIPTION 
FROM T1
LEFT OUTER JOIN T2
ON T1.ID=T2.KEY 
WHERE    T1.status!='CLOSED' 
AND (T2.CREATEDATE= (SELECT MAX(CREATEDATE) 
FROM T2
WHERE  T2.KEY=T1.ID))

Я попытался присоединиться к нимно в результате у меня null :

select T1.ID,T3.COMPANY,T2.DESCRIPTION 
from T1
INNER JOIN T3 ON T1.CLASSID=T3.CLASSID
LEFT OUTER JOIN  T2
ON T1.ID=T2.KEY 
 where (T1.status!='CLOSED') AND  (T1.PRIORITY)>5
AND (T2.CREATEDATE= (SELECT MAX(CREATEDATE) 
FROM T2
WHERE T2.KEY=T1.ID))

, как будто он не распознал последнюю часть для получения значения MAX из таблицы T2.

Что я делаю неправильно?Спасибо за помощь

Ответы [ 2 ]

2 голосов
/ 19 марта 2012

Во-первых, используйте псевдоним для подзапроса в таблице T2.

T2.CREATEDATE =
        (SELECT MAX(T2Alias.CREATEDATE)
        FROM T2 AS T2Alias
        WHERE T2Alias.KEY = T1.ID)

Во-вторых, рассмотрите возможность перемещения этого условия в предложение ON в LEFT JOIN к таблице T2.

0 голосов
/ 19 марта 2012

Первое, что бросается в глаза, это новая зависимость как от значения T1.Priority> 5, так и от значения T2.CreateDate, равного результату встроенного запроса:

( AND (T1.PRIORITY) > 5
  AND (T2.CREATEDATE =
  (SELECT MAX(CREATEDATE) FROM T2 WHERE T2.KEY = T1.ID) )

Без данных этотрудно проверить, однако это может быть проблемой

...