2009-11-23 6 views
4

Je vous écris ma requête de jointure de la manière suivanteQuelle est la différence entre ces deux requêtes?

UPDATE UPLOAD_TEMP 
    SET  UPLOAD_TEMP.Borr_Add_Req = t2.YesNoResponse, 
    FROM UPLOAD_TEMP t1 
    INNER JOIN GB_RequiredFields t2 ON t1.State = t2.StateCode 
             AND t1.County_Id = t2.CountyId 
             AND t1.Group_code = t2.Doc_type_group_code 

Cependant, il peut aussi être écrit de cette façon aussi

UPDATE UPLOAD_TEMP 
    SET  UPLOAD_TEMP.Borr_Add_Req = t2.YesNoResponse, 
    FROM UPLOAD_TEMP t1 
    INNER JOIN GB_RequiredFields t2 ON t1.State = t2.StateCode 
    WHERE t1.County_Id = t2.CountyId 
     AND t1.Group_code = t2.Doc_type_group_code 

Y at-il une différence entre les deux et qui est le meilleur moyen de coder .

Répondre

4

C'est un argument de la vieillesse - que ce soit pour spécifier des arguments supplémentaires WHERE dans la clause JOIN ou comme séparée où.

Je préfère l'approche de définir seulement les arguments qui composent vraiment la JOIN dans la clause JOIN, et tout le reste plus tard dans la clause WHERE. Semble plus propre à moi.

Mais je pense qu'à la fin, fonctionnellement, c'est la même chose - c'est juste une question de préférence personnelle, vraiment.

1

Les deux requêtes auront le même résultat et votre serveur sql devrait gérer les deux de la même manière. Donc, il n'y a pas de différence du tout - juste comment vous voulez le faire. Vous pouvez même le faire de la façon suivante:

UPDATE UPLOAD_TEMP 
    SET  UPLOAD_TEMP.Borr_Add_Req = t2.YesNoResponse, 

    FROM UPLOAD_TEMP t1, GB_RequiredFields t2 
    WHERE 
      t1.State = t2.StateCode 
      AND t1.County_Id = t2.CountyId 
      AND t1.Group_code = t2.Doc_type_group_code 
+1

Très ancien style JOIN. Mauvaise pratique. – gbn

+1

Je ne l'aime pas non plus, mais qui dit Mauvaise pratique? Cela n'a pas d'importance pour le SGBD, c'est juste pour la lisibilité et cela dépend principalement de la façon dont vous l'avez fait dans le passé. – Pesse

+1

@Pesse: Eh bien, l'ancienne jointure externe de style * = = * est obsolète après SQL Server 2008, donc vous aurez un complet mis.mash de styles – gbn

Questions connexes