T-SQL наиболее предпочтительный способ с объединением - PullRequest
3 голосов
/ 30 марта 2012

У меня есть 2 sql ниже. Каков наиболее предпочтительный метод получения table1.date> 0

Option1:

    select table1.id,table2.firstname, table2.lastname
    from table1 join table2 on table1.id = table2.id and table1.date > 0

Option2:

    select table1.id,table2.firstname, table2.lastname
    from table1 join table2 on table1.id = table2.id where table1.date > 0

Ответы [ 6 ]

5 голосов
/ 30 марта 2012

Второй вариант проще, поскольку он понятнее, и я знаю, что данные фильтруются с помощью предложения WHERE.

3 голосов
/ 30 марта 2012

ВСЕГДА используйте второй вариант.

Для INNER JOIN они эквивалентны.

Для OUTER JOIN две версии будут возвращать разные наборы результатов!

Если вы установите этот фильтр в критерии ON для OUTER JOIN, у вас будут отфильтрованы записи до применения JOIN (а не после), что может дать вам неожиданные результаты.

1 голос
/ 30 марта 2012

Я бы выбрал вариант 2, всегда лучше объединить значения, а затем исключить те, которые вам не нужны, в предложении where.

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

Не вопрос, а во внешнем соединении и против того, где может иметь значение.

Учтите следующее. Вторая возвращает все строки в docSVsys, а первая - нет. Куда в основном превратили внешнее соединение в обычное соединение.

    select COUNT(docSVsys.sID)
    from docSVsys 
    left outer join docMVtext 
    on docMVtext.sID = docSVsys.sID 
    where docMVtext.fieldID = 130

    select COUNT(docSVsys.sID)
    from docSVsys 
    left outer join docMVtext 
    on docMVtext.sID = docSVsys.sID 
    and docMVtext.fieldID = 130 

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

0 голосов
/ 30 марта 2012
Select 
    table1.id, table2.firstname, table2.lastname 
FROM table1 
INNER JOIN table2 ON table1.id = table2.id 
WHERE table1.date > 0

Должно работать.

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

Вариант 2 синтаксически корректен и работает нормально. Вы правильно применяете фильтр, используя условие WHERE.

Вариант 1 верен, но его нелегко отличить по сравнению с вариантом 2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...