簡體   English   中英

SQL Server查詢-Where子句的最佳實踐

[英]SQL Server Query - Best Practice on Where Clause

看一下這個查詢:

Select 
    b.CodCred, 
    b.Codigo, 
    c.Nome 
from 
    AS_CredenciadosUsu a 
inner join 
    AS_Credenciados b on a.CodCred=b.CodCred 
inner join 
    Cadastro c on b.Codigo=c.Codigo 
Where 
    a.NumContrato = 21 and 
    b.NumContrato = 21 and 
    c.NumContrato = 21 and 
    a.CodUsuD = 1

我必須在這3個表中設置NumContrato列。

是否有最佳實踐可對此查詢執行此操作? 這對我來說似乎很骯臟,但是我不知道如何做得更好,或者不知道有什么方法可以做得更好。

謝謝。

如果所有三個表中的NumContrato字段實際上都相關,則應該將它們作為連接條件。

然后,在您的WHERE子句中,您應該在其中進行過濾(而不是加入),您只需指定一次條件即可。

就是

Select b.CodCred, b.Codigo, c.Nome
  from AS_CredenciadosUsu a
 inner join AS_Credenciados b
    on a.CodCred = b.CodCred
   and a.NumContrato = b.NumContrato
 inner join Cadastro c
    on b.Codigo = c.Codigo
   and c.NumContrato = b.NumContrato
 Where a.NumContrato = 21
   and a.CodUsuD = 1

這應該使引擎更好地工作,並且還使您更易於閱讀和維護:

Select 
    b.CodCred, 
    b.Codigo, 
    c.Nome 
from AS_CredenciadosUsu a 
join AS_Credenciados    b on a.NumContrato=b.NumContrato and a.CodCred=b.CodCred 
join Cadastro           c on b.NumContrato=c.NumContrato and b.Codigo=c.Codigo 
Where 
    a.NumContrato=21 and 
    a.CodUsuD=1

這樣,您將擁有在b的join子句中將b鏈接到a的所有條件...在c ...的join子句中將c鏈接到b的所有條件以及WHERE子句中a的所有條件。 常量(21和1)僅使用一次,如果需要,也可以更輕松地用參數替換它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM