SQL Server: si existe; sinon
J'ai une tableA:
ID value
1 100
2 101
2 444
3 501
Aussi TableB
ID Code
1
2
Maintenant, je veux remplir col = code de la table B s'il existe ID = 2 dans tableA. pour plusieurs valeurs , obtenez la valeur max. sinon, remplissez-le avec '123'. Maintenant, voici ce que j'ai utilisé:
if exists (select MAX(value) from #A where id = 2)
BEGIN
update #B
set code = (select MAX(value) from #A where id = 2)
from #A
END
ELSE
update #B
set code = 123
from #B
Je suis sûr qu'il y a un problème dans BEGIN; END ou dans if EXIST; ELSE. Fondamentalement, je veux contourner l'instruction else part if select dans IF-part exist et vice-versa. Par exemple, l'instruction if select De IF = part est:
(select MAX(value) from #A where id = 4)
, Il devrait juste remplir 123, coz ID = 4 n'existent pas ! Nous vous invitons à sensibiliser ! Merci d'avance
2 réponses
Modifier
Je veux ajouter la raison pour laquelle votre instruction IF
semble ne pas fonctionner. Lorsque vous faites un EXISTS
sur un ensemble, il va toujours être true
. Il renvoie une valeur même si le ID
n'existe pas. Bien sûr, c'est NULL
, mais c'est le retourner. Au lieu de cela, faites ceci:
if exists(select 1 from table where id = 4)
Et vous arriverez à la partie ELSE
de votre déclaration IF
.
Maintenant, voici une meilleure solution basée sur les ensembles:
update b
set code = isnull(a.value, 123)
from #b b
left join (select id, max(value) from #a group by id) a
on b.id = a.id
where
b.id = yourid
Ceci a l'avantage de pouvoir fonctionner sur le table entière plutôt que des identifiants individuels.
Essayez ceci:
Update TableB Set
Code = Coalesce(
(Select Max(Value)
From TableA
Where Id = b.Id), 123)
From TableB b