Copiando dados entre linhas em uma tabela
No gerenciamento de banco de dados, muitas vezes é necessário atualizar linhas com base em dados de outras linhas dentro do mesma mesa. Considere uma tabela com colunas ID, NAME e VALUE que contém valores NAME duplicados, como segue:
ID | NAME | VALUE | ---------------------------- 1 | Test | VALUE1 | 2 | Test2 | VALUE2 | 1 | Test2 | | 4 | Test | | 1 | Test3 | VALUE3 |
Suponha que queremos atualizar os campos VALUE vazios em linhas com valores NAME duplicados. Para conseguir isso, podemos empregar consultas SQL que fazem referência e atualizam valores dentro da mesma tabela.
Uma abordagem envolve o uso de uma instrução UPDATE com uma junção. Na consulta a seguir, unimos data_table duas vezes, apelidando-os de dt1 e dt2:
UPDATE data_table dt1, data_table dt2 SET dt1.VALUE = dt2.VALUE WHERE dt1.NAME = dt2.NAME AND dt1.VALUE = '' AND dt2.VALUE != ''
Esta consulta identifica e atualiza os campos VALUE vazios (onde dt1.VALUE está vazio) com não vazios VALUEs de outras linhas com o mesmo NAME (onde dt2.VALUE não está vazio).
Como alternativa, podemos usar uma subconsulta para identifique as linhas com VALUEs não vazios e junte-as novamente à tabela original para atualização:
UPDATE data_table t, (SELECT DISTINCT ID, NAME, VALUE FROM data_table WHERE VALUE IS NOT NULL AND VALUE != '') t1 SET t.VALUE = t1.VALUE WHERE t.ID = t1.ID AND t.NAME = t1.NAME
Ambas as consultas resultarão na saída desejada:
ID | NAME | VALUE | ---------------------------- 1 | Test | VALUE1 | 2 | Test2 | VALUE2 | 1 | Test2 | VALUE2 | 4 | Test | VALUE1 | 1 | Test3 | VALUE3 |
Essas abordagens fornecem flexibilidade na manipulação de dados dentro de uma tabela, permitindo atualizar valores com base em critérios que incluem outras linhas na mesma tabela.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3