Care sunt avantajele conexiunii explicite de conectare la tranziție în SQL?

Când mă înscriu trei sau mai multe mese împreună printr-o coloană obișnuită, mi-aș scrie următoarea interogare:

SELECT *
FROM   a, b, c
WHERE  a.id = b.id
AND    b.id = c.id

un coleg mi-a întrebat recent de ce nu am făcut explicit Înscrieți-vă la închiderea tranziției în întrebările mele, cum ar fi:

SELECT *
FROM   a, b, c
WHERE  a.id = b.id
AND    b.id = c.id
AND    c.id = a.id

sunt cu adevărat orice avantaje în acest sens? Cu siguranta optimizatorul poate implica acest lucru pentru sine?

editează: Știu că este o sintaxă rău, dar este un exemplu rapid și murdar de cod moștenit legitim +1 +1 Stu pentru curățare

0
fr hi bn

8 răspunsuri

Nu există această sintaxă care decurge din zilele în care s-au înscris în limbă. Nu sunt sigur de problemele asociate cu aceasta, dar există cu siguranță constructe de limbi care sunt mai mult sprijinite pentru îmbinarea tabelelor.

0
adăugat

Dacă te uiți la el din punct de vedere matematic, exemplele tale ar trebui să obțină aceleași rezultate.

a = b = c

Deci, primul dvs. exemplu ar produce aceleași rezultate ca al doilea, astfel încât nu este nevoie să faceți munca suplimentară.

0
adăugat

Nu aveți nevoie să faceți acest lucru în motoarele bazei de date de astăzi, dar a existat o perioadă în care astfel de lucruri ar da optimizatorului de interogări mai multe sugestii cu privire la posibilele căi de indexare și, astfel, la rezultate mai rapide.

În aceste zile, sintaxa întreagă este în orice caz.

0
adăugat

În Microsoft SQL, planurile de interogare pentru aceste două interogări sunt identice - ele sunt executate în același mod.

0
adăugat

Vreau doar să spun că un astfel de aderare este lucrarea diavolilor Gandeste-te la asta; condițiile de îmbinare și de filtrare se amestecă împreună în declarația în care se află Ce se întâmplă atunci când trebuie să vă alăturați peste 20 de tabele și să filtrați 15 valori?

Din nou, doar $ .02

0
adăugat

Aceasta este sintaxa murdară, rău moștenită. Tu scrie asta ca

  Selectați
  * - Oh, și să nu folosiți niciodată *, fie
Din
  A
  Intrarea internă B Pe A.ID = B.ID
  Intrarea internă C Pe B.ID = C.ID
 
0
adăugat

Această sintaxă are utilizările sale deși ... există momente când veți găsi că trebuie să vă alăturați două mese pe mai multe câmpuri

0
adăugat
Puteți face acest lucru în sintaxa de conectare obișnuită FROM table1 t1. JOIN table2 t2 pe t1.field1 = t2.field1 și t.field2 = t2.field2
adăugat autor HLGEM, sursa

Această întrebare este similară cu cea prezentată aici, cu o explicație foarte aprofundată:

Întrebare SQL de la articolul lui Joel Spolsky

Răspunsul scurt este că declarația explicită a proprietății transitive poate accelera interogarea. Acest lucru se datorează faptului că optimizarea interogării nu este o sarcină trivială, iar unele servere SQL ar putea avea probleme cu aceasta.

0
adăugat