Нужна помощь с левым внешним соединением? - PullRequest
1 голос
/ 22 февраля 2011
SELECT ID
 (
 Select ID from Table1
 where Table1.ID=@ID
 )T1
 Left Outer join
 (
 Select top 1 Table2.ID from Table2 join Table3 on table3.ID=Table2.ID 
 order by Table2.ID DESC
 )T2 on T2.ID=T1.ID

Это всего лишь пример фактической хранимой процедуры, с которой я столкнулся, проблема, с которой я сталкиваюсь, заключается в том, что я не могу получить значения из T2, он просто возвращает значение NULL, но когда я изменяю его, Top 5 я возможность получить значения. Является ли это соединение правильным, необходимо ли иметь часть внутри левого внешнего соединения, чтобы получить значения?

Ответы [ 3 ]

2 голосов
/ 22 февраля 2011

Если вы используете TOP, вам нужно определиться со всеми вариантами (всеми тремя), как должны быть упорядочены ваши данные, чтобы вы могли иметь некоторый контроль над тем, какие значения вы возвращаете, и, возможно, также быть более точным в отношении того, что вы фильтруете.

1 голос
/ 22 февраля 2011

Что именно вы пытаетесь достичь?

Вы можете попробовать что-то вроде этого:

SELECT
   TOP 250 Table1.ID
FROM
   Table1
LEFT OUTER JOIN
   Table2 ON Table2.ID = Table1.ID
LEFT OUTER JOIN
   Table3 ON Table3.ID = Table2.ID
WHERE
   Table1.ID = @ID
ORDER BY
   Table1.ID DESC
1 голос
/ 22 февраля 2011

Пара наблюдений.

  1. Нет условия ORDER BY для вашего T1 SELECT, так как вы узнаете, какой TOP 250 возвращается?

  2. Если T2 возвращает NULL, то нет совпадения между T1 и T2, возможно, из-за моей первой точки?

...