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