Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Continuation of Message #1594531 - Use of WHERE
Message
De
22/02/2014 10:47:41
 
 
À
22/02/2014 08:58:48
Walter Meester
HoogkarspelPays-Bas
Information générale
Forum:
Microsoft SQL Server
Catégorie:
Syntaxe SQL
Versions des environnements
SQL Server:
SQL Server 2008
Application:
Web
Divers
Thread ID:
01594922
Message ID:
01594938
Vues:
42
First is more readable, but only because you set it up that way ;-)

While the optimizer probably will create identical plans, for me only link fields belong into join-on clause, with a
where POH.OrderDate BETWEEN '1-1-2008' AND '12-31-2008'

BTW:
> group by Vend.Name
might result in different results from
> GROUP BY VendorID)

;-)


>>Through i recognise the place of CTE's , I really hate to use them, and would avoid them whenever possible. One of the problems is that it is not an ANSI standard and often there is a better (readable and maintainable) alternative.
>>
>>Interesting. I really like CTEs and I think that, in many instances, replacing derived tables with them makes the code much more readable and maintainable.
>
>
>Do you think that:
>
>
>   ;WITH POTemp as
>      ( SELECT VendorID, SUM(TotalDue) as VendorTotal 
>                FROM Purchasing.PurchaseOrderHeader
>                WHERE	 where OrderDate BETWEEN '1-1-2008' AND '12-31-2008'  
>                  GROUP BY VendorID) 
>   
>  select Vend.Name,  VendorTotal
>    from  Purchasing.Vendor   as Vend
>      left outer   join POTemp
>               on Vend.BusinessEntityID = POTemp.VendorID
>      order by VendorTotal desc
>
>
>Is more readable than
>
>
>select Vend.Name, SUM(TotalDue) as VendorTotal
>      from  Purchasing.Vendor   as Vend
>         left outer  join  Purchasing.PurchaseOrderHeader AS POH  
>               on Vend.BusinessEntityID = POH.VendorID AND POH.OrderDate BETWEEN '1-1-2008' AND '12-31-2008'   
>         group by Vend.Name   
>         order by VendorTotal desc
>
>
>or
>
>
>select Vend.Name, (SELECT SUM(TotalDue) FROM   Purchasing.PurchaseOrderHeader 
>     WHEREVend.BusinessEntityID = VendorID AND OrderDate BETWEEN '1-1-2008' AND '12-31-2008') as VendorTotal
>      from  Purchasing.Vendor   as Vend
>      order by VendorTotal desc
>
>?
>
>As I was saying, in an awfull lot of case you just do not need CTE's as there is a better alternative.
>
>Aside from that, CTE's cannot be used as a total replacement of temp tables which are dirived from more complex statement as you cannot nest CTE's and cannot use two CTE's in one SQL statement.
>
>In my carreer I've used CTE's only in a handful of cases, but only as a last resort. Esspecially the recursive variant is sometimes very difficult to follow and therefore hardly maintainable. I appreciate people use it to show their capabilities, but to me, simplicity and maintainability is worth much more than to score with a SQL statement that can only be analysed and maintained by high skilled SQL programmers.
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform