Mise à jour de colonne d'une autre table de la colonne en fonction de la correspondance des colonnes
La requête suivante est la mise à jour de tous les (80k) documents à la place de ceux qui correspondent (5k). Ce qui est mal avec elle et comment peut-il être corrigé?
update ALAM set ALAM.CDate = (select IDCP.CDate from IDCP
where ALAM.ASID = IDCP.ASID and ALAM.AID = IDCP.AID
and ALAM.MCode = '10001')
Nombre d'ALAM Table = 80 000 documents environ
Nombre d'enregistrements de IDCP Table = de 5 000 dossiers environ
Que des informations supplémentaires:
select ALAM.ASID, ALAM.AID, ALAM.CDate
from ALAM, IDCP
where ALAM.ASID = IDCP.ASID and ALAM.AID = IDCP.AID and ALAM.MCode = '10001'
résultat de 5000 enregistrements env
OriginalL'auteur psam | 2011-10-07
Vous devez vous connecter pour publier un commentaire.
OriginalL'auteur onedaywhen
Vous ne spécifiez pas de version de SQL Server. Vous pouvez utiliser la propriété
UPDATE...FROM
syntaxe dans toutes les versions.Ou la plus standard
MERGE
déclaration dans SQL Server 2008.OriginalL'auteur Martin Smith
Dans le premier relevé de compte que vous n'avez pas déclaré la clause where de la requête principale. De sorte qu'il s'exécute sur tous les enregistrements dans ALAM (qui je suppose sont 80K).
Dans la seconde requête, vous rejoignez les 2 tables, donc vous ne prenez ceux de ALAM qui correspondent à celles de IDCP. C'est ce qui s'est passé.
OriginalL'auteur Tjekkles
Comme tjekkles dit vous l'avez laissé la clause where de la mise à jour que vous pouvez retirer de la sélection interne:
OriginalL'auteur Paul Morgan