русский
Germany.ruForen → Архив Досок→ Programmierung

SQL

01.06.11 20:06
Re: SQL
 
  scorpi_ прохожий
in Antwort voxel3d 26.05.11 14:25
С опозданием, но может будет полезно.
0. Есть такая замечательная книжица Inside Microsoft® SQL Server® 2008: T-SQL Programming, в ней подробно изложено, как обрабатываются запросы.
1. При обработке запроса сначала идут кроссы, потом джойны, потом добавление значений для OUTER джойнов.
2. Порядок джойнов определяется порядком ON
3. Смотрим на твои ONы, в ссответствии со скобками:
FROM
(
(
Materiaal_T INNER JOIN
(
Leveranciers_T INNER JOIN
(
Handvat_T INNER JOIN
(
OPDRUKBONS_T LEFT JOIN Klantenadressen_T ON OPDRUKBONS_T.Klantnummer=Klantenadressen_T.KlantNr -- 1
)
ON Handvat_T.IDnr=OPDRUKBONS_T.Handvat -- 2
)
ON Leveranciers_T.IDnr=OPDRUKBONS_T.Leverancier -- 3
)
ON Materiaal_T.IDnr=OPDRUKBONS_T.Materiaal -- 4
)
LEFT JOIN KLACHTEN_T ON OPDRUKBONS_T.KooporderNr=KLACHTEN_T.KooporderNr -- 4
)

4. Получаем:

FROM OPDRUKBONS_T
LEFT JOIN Klantenadressen_T ON OPDRUKBONS_T.Klantnummer = Klantenadressen_T.KlantNr
INNER JOIN Handvat_T ON OPDRUKBONS_T.Handvat = Handvat_T.IDnr
INNER JOIN Leveranciers_T OPDRUKBONS_T.Leverancier = Leveranciers_T.IDnr
INNER JOIN Materiaal_T ON OPDRUKBONS_T.Materiaal = Materiaal_T.IDnr
LEFT JOIN KLACHTEN_T ON OPDRUKBONS_T.KooporderNr = KLACHTEN_T.KooporderNr

5. Но, как правильно заметил дигитальный, порядок иннеров вообще не важен, а при левом джойне берутся все записи из левой таблицы и затем идет добавка нулей для несуществующих правых значений. То бишь в нашем случае порядок левых тоже неважен. И поэтому написав FROM OPDRUKBONS_T мы можем остальные 5 джойнов записывать в абсолютно любом порядке.
6. За скобки я в детстве убивал из рогатки.

 

Sprung zu