Aggiornamento di una tabella DB esclusi i NULL
-
19-08-2019 - |
Domanda
Ho due tabelle con le stesse colonne
tbl_source (ID, Title)
tbl_dest (ID, Title)
Voglio aggiornare i titoli tbl_dest da tbl_source in cui gli ID in dest e source corrispondono. Tuttavia, non voglio aggiornare il titolo dest se il titolo sorgente è null (o vuoto).
Ho questo:
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)
Ma continua a inserire i null.
Come costruirò una query del genere?
Sto usando SQL Server 2005.
Grazie.
Soluzione
Usa un join interno ...
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 <> ''
Altri suggerimenti
Sta impostando il valore su null perché la subquery restituisce null e non stai filtrando i record nella tua clausola di aggiornamento.
Prova invece qualcosa del genere:
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)
Questo perché la query esterna sta aggiornando ogni record (nessuna clausola WHERE), quindi quando la query interna non trova alcun record corrispondente, viene inserito NULL.
Aggiungi una clausola WHERE alla query esterna per non eseguire un aggiornamento su tali record:
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)