SQL de mise à jour des lignes dans la colonne à l'aide de CAS
J'ai deux tables, les Utilisateurs et les #TempTable (qui est un sous-ensemble d'Utilisateurs). Je voudrais mettre à jour une colonne, est actif, dans la table des Utilisateurs. Je voudrais vous est actif = 1 si un utilisateur qui est dans #TempTable est aussi dans la table des Utilisateurs, et l'ensemble est actif = 0 sinon.
Obtenir les utilisateurs des utilisateurs qui ne sont PAS dans #TempTable (est actif doit être mis à 0 pour ces utilisateurs):
-- (Users \ #TempTable) U (#TempTable \ Users)
SELECT u.UserName
FROM Users u
WHERE (u.UserName) NOT IN
(SELECT t.[User Name] FROM #TempTable t)
UNION ALL
SELECT t.[User Name]
FROM #TempTable t
WHERE (t.[User Name]) NOT IN
(SELECT u.UserName FROM Users u)
Appelons cela le jeu de résultats. J'apprécierais un peu d'aide avec mon instruction de mise à JOUR. Ce que j'aimerais être capable de le faire est:
UPDATE Users
SET IsActive = (CASE WHEN User.UserName IN ResultSet THEN 0 ELSE 1 END)
sans avoir à écrire le CAS LORSQUE, pour chaque Utilisateur.Nom d'utilisateur. Merci à l'avance!
OriginalL'auteur Will Weld | 2013-01-17
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser une jointure dans l'instruction de mise à JOUR.
Notes :
Vous pouvez également utiliser une sous-requête, mais qui serait beaucoup plus lent (de l'ordre de n carrés pas de l'ordre de n). Pour un petit nombre d'utilisateurs, ce ne serait pas grave.
Je n'ai
testsi je pouvais avoir une faute de frappe /correction de bogues dans le code ci-dessus.Basé sur un fou des commentaires sur la façon dont ce ne serait pas de travail, j'ai mis en place un violon.
Profiter de travail:
http://sqlfiddle.com/#!6/25235/3
OriginalL'auteur Hogan