查看此查询:
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
。
最佳做法是在此查询中执行此操作吗?这对我来说只是看起来很脏,但我不知道如何做得更好或者是否有任何方法可以做得更好。
感谢。
答案 0 :(得分:2)
如果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
答案 1 :(得分: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)仅使用一次,如果需要,它们也可以更容易地用参数替换。