оставил внешнее соединение с запросом where в sql - PullRequest
0 голосов
/ 27 сентября 2011

У меня есть SQL-запрос, как это:

    select something
from
(
inner query here - outputs is correct: eg 2000 datasets
) as a

left outer join tableA
on tableA.id=innerQuery.id
where  someYear = -----------> had to change this "and" to "where"
(
select max(tableYear)
from tableC
where
etc....
)

eg years:
2011, 1999, 1901 max is 2011.
1978, 1981,1990 max is 1990.

и т.д .. проблема, с которой я сталкиваюсь, заключается в том, что с оператором «где» я получаю меньше 1600 наборов данных; однако, если бы я должен был ввести значение и использовать «и», выходные данные получаются правильными 2000. Есть ли способ использовать «где» с левым внешним соединением и получить все мои результаты?

Ответы [ 3 ]

1 голос
/ 27 сентября 2011

В LEFT JOIN имеет значение, используете ли вы фильтр в предложении JOIN или в предложении WHERE.

Я объяснил разницу очень подробно здесь:
Какая разница в этих двух запросах как получение двух разных наборов результатов?

Чтобы подвести итог в одном предложении:
если вы хотите, чтобы все 2000 строк, а не только 1600, у вас естьпоместить фильтр в предложение JOIN.

1 голос
/ 27 сентября 2011

Если вы проверяете столбец из таблицы LEFT JOINed в предложении WHERE, вы заставляете это соединение вести себя так, как если бы оно было INNER JOIN. Правильный метод - сделать этот тест частью условия соединения.

0 голосов
/ 27 сентября 2011

Почему бы не оставить условие как часть объединения (как вы опубликовали? somedate должно быть из правой таблицы, т. Е. TableA, и поэтому оно может быть нулевым. Поэтому, если вы хотите получить все результаты, вы должны учитывать, например,

IsNull(somedate, '1/1/2000') = '1/1/2000'

или

(somedate = '1/1/2000' OR somedate is null)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...