2014-10-29 3 views
1

Может ли кто-нибудь рассказать мне о том, что будет между этими двумя?T-SQL JOIN между JOIN и ON

SELECT * 
FROM dbo.UserProducts AS UP 
INNER JOIN dbo.Products AS P 
    ON P.ProductID = UP.ProductID 
INNER JOIN dbo.Industry AS I 
    ON I.IndustryCode = P.IndustryCode 



SELECT * 
FROM dbo.UserProducts AS UP 
INNER JOIN dbo.Products AS P 
    INNER JOIN dbo.Industry AS I 
     ON I.IndustryCode = P.IndustryCode 
    ON P.ProductID = UP.ProductID 

Я видел второй вариант объяснен на MSDN, однако я не могу найти это больше, и я думаю, что он использует ЛЕВАЯ JOINS.

+0

Для обоих примеров, если первое внутреннее соединение не может быть '... AS P', а не' ... AS UP' ? –

+0

wow второй выглядит действительно грубым. «Как я могу сделать это как можно труднее для будущих разработчиков, чтобы понять. : P – Kritner

+0

@ Kritner Раздражающе, конструктор запросов SQL Server Management Studio обычно генерирует запросы, используя второй метод написания объединений. Это абсолютный кошмар, чтобы затем прочитать их и выяснить, в каких столбцах включены столы. –

ответ

3

grammar for FROM объясняет это.

Синтаксис: FROM { <table_source> }.

И <table_source> может быть одной из нескольких вещей, включая <joined_table>.

И <joined_table> может состоять из:

<table_source> <join_type> <table_source> ON <search_condition> 

Так <table_source> может быть присоединиться к <table_source>, который сам по себе может быть присоединиться и т.д.

Ваш первый пример является «UserProducts, присоединился к Продукты и продукты, связанные с промышленностью ».

Второй является «UserProducts, присоединился к (Продукция и промышленности объединились)»

1

Нет ничего другого между двумя примерами с логической точки зрения, один гораздо проще читать.

Иногда это может на самом деле имеет смысл поставить все критерии ниже все стыки:

SELECT * 
FROM table1 a 
LEFT JOIN table2 b 
LEFT JOIN table3 c 
    ON  a.col1 = c.col1 
    ON  b.ID = c.ID 

Но в целом это легче читать, когда критерии непосредственно следует за JOIN

+0

Понимаю, это было просто читаемостью. Благодаря! –

+0

Не знаете, как этот пример поддерживает вашу точку; нет никаких оснований присоединяться к этим таблицам в этом порядке, кроме произвольных имен и псевдонимов, которые вы использовали. – Air

+0

В этом утверждении недостаточно предложений 'ON'. –