Salut,
Mersi pentru recomandare si explicarea ordinii.
Nelamurirea mea era legata de plasarea conditiilor.
Voi cauta in carte mai multe detalii dar ca si exermplu pragmatic ar fi vorba de :
select
*
from Document
inner join DocumentDetail on Document.DocumentId = DocumentDetail.DocumentId
inner join InvoiceDetail on DocumentDetail.DocumentDetailId = InvoiceDetail.InvoiceDetailId
where
Document.DocumentId = 1
option(force order) -- pentru a nu fi reordonat querry-ul
Aici s-ar face joinul dintre toate DocumentDetail cu InvoiceDetail ( pe conditia de on) si daca ar fi 100.000 atunci ar fi match-uite toate, dupa care se filtreaza cu conditia de where si din cele 100.000 se ia doar inregistrarea relevanta.
select
*
from Document
inner join DocumentDetail on Document.DocumentId = DocumentDetail.DocumentId and Document.DocumentId = 1
inner join InvoiceDetail on DocumentDetail.DocumentDetailId = InvoiceDetail.InvoiceDetailId
option(force order) -- pentru a nu fi reordonat querry-ul
Teoretic acum ar trebui sa se faca joinul dintre DocumentDetail si InvoiceDetail doar cu un match pe inregistrarea relevanta (dupa ce se aplica conditia de on dintre Document si DocumentDetail se foloseste inputul si se merge mai departe doar cu 1 inregistrare in loc de 100.000 cum ar fi fost in cazul anterior).
Intrebarea este daca al 2-lea caz, intradevar va citi din InvoiceDetail doar 1 inregistrare in loc de 100.000
Mersi,