Atualizando uma tabela excluindo DB nulos
-
19-08-2019 - |
Pergunta
Eu tenho duas tabelas com as mesmas colunas
tbl_source (ID, Title)
tbl_dest (ID, Title)
Quero atualizar os títulos tbl_dest do tbl_source onde os ids em dest e fonte de jogo. No entanto, eu não quero para atualizar o título dest se o título da fonte é nulo (ou em branco).
Eu tenho isto:
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)
Mas ele mantém inserindo os valores nulos.
Como eu poderia construir tal consulta?
Eu estou usando servidor SQL 2005.
Graças.
Solução
Use uma junção interna ...
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 <> ''
Outras dicas
Tem de definir o valor como nulo porque a subconsulta está retornando null, e você não está filtrando os registros em sua cláusula de atualização.
Tente algo parecido com isto em vez disso:
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)
Isso porque a consulta externa está atualizando todos os registros (sem cláusula WHERE), então quando a consulta interna não encontra nenhum registro correspondente, NULL é inserido.
Adicionar uma cláusula WHERE para a consulta externa não fazer uma atualização sobre os registros:
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)