Mise à jour d'une table de base de données à l'exclusion des NULL
-
19-08-2019 - |
Question
J'ai deux tables avec les mêmes colonnes
tbl_source (ID, Title)
tbl_dest (ID, Title)
Je souhaite mettre à jour les titres tbl_dest à partir de tbl_source où les identifiants de dest et source correspondent. Cependant, je ne souhaite pas mettre à jour le titre de destination si le titre source est null (ou vide).
J'ai ceci:
UPDATE tbl_dest
SET tbl_dest.Title =
(SELECT title
FROM tbl_source
WHERE tbl_dest.id = tbl_source.ID and tbl_source.title is not null)
Mais il continue d'insérer les NULL.
Comment pourrais-je construire une telle requête?
J'utilise SQL Server 2005.
Merci.
La solution
Utiliser une jointure interne ...
Update tbl_dest
Set tbl_dest.Title = tbl_source.Title
From tbl_dest inner join tbl_source on tbl_dest.ID = tbl_source.ID
Where tbl_source.Title is not null and tbl_source.Title <> ''
Autres conseils
La valeur null a été définie car la sous-requête renvoie la valeur null et vous ne filtrez pas les enregistrements dans votre clause de mise à jour.
Essayez quelque chose comme ceci à la place:
UPDATE tbl_dest
SET tbl_dest.Title =
(SELECT title
FROM tbl_source
WHERE tbl_source.id = tbl_dest.id)
WHERE EXISTS
(SELECT 1
FROM tbl_source
WHERE tbl_source.id = tbl_dest.id
AND tbl_source.title IS NOT NULL)
En effet, la requête externe met à jour tous les enregistrements (pas de clause WHERE). Ainsi, lorsque la requête interne ne trouve aucun enregistrement correspondant, NULL est inséré.
Ajoutez une clause WHERE à la requête externe pour ne pas mettre à jour ces enregistrements:
UPDATE tbl_dest
SET tbl_dest.Title =
(SELECT title
FROM tbl_source
WHERE tbl_dest.id = tbl_source.ID and tbl_source.title is not null)
WHERE EXISTS
(SELECT title
FROM tbl_source
WHERE tbl_dest.id = tbl_source.ID and tbl_source.title is not null)