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.

Foi útil?

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)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top