2010-12-10 5 views
0

Dans la déclaration ci-dessous, j'essaie de normaliser les identificateurs de position dans la table "Réponses" en fonction des données que je récupère de l'instruction SELECT de la sous-requête. Fondamentalement, il y a des LocationID dans la Table des Réponses qui ne sont pas dans la MasterList, je voudrais remplacer ces occurrences par l'emplacement de '1234'. Je pensais que la déclaration ci-dessous fonctionnerait, mais ce n'est pas le cas. Lorsque je tente de l'exécuter, il met à jour toutes les années LocationID dans les tableaux de réponses après le 5 mai 2010.Mise à jour de la table d'une sous-requête

UPDATE Replies 
SET Replies.LocationID = '1234' 
FROM (SELECT lml.LocationID FROM Replies sfs LEFT JOIN MasterList lml ON lml.LocationID=sfs.LocationID WHERE sfs.CreateDate >= '5/5/2010') AS rs 
WHERE rs.LocationID is null 

Répondre

2

Vous pouvez utiliser le existe pas clause pour trouver des endroits qui n'existe pas MasterList comme

update replies 
set locationid='1234' 
where not exists (
select 1 from masterlist as ml 
where 
    ml.locationid=replies.locationid 
) 
and CreateDate >= '5/5/2010' 
+0

merci, cela a parfaitement fonctionné. pour la plupart, je comprends ce qui se passe, sauf que je ne sais pas quel est le point de 'SELECT 1'; c'est la première fois que je l'ai vu – ploosh

Questions connexes