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.

È stato utile?

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)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top