Ao trabalhar no Oracle, você pode descobrir que alguns de seus registros têm duplicatas. Você pode excluir essas linhas duplicadas identificando-as e usando seu RowID ou endereço de linha. Antes de começar, você deve criar uma tabela de backup para o caso de precisar consultá-los depois de excluir os registros.
Passos
Método 1 de 4: Identificando sua duplicata
Etapa 1. Identifique a duplicata
Nesse caso, identifique a duplicata do exemplo, "Alan". Certifique-se de que os registros que você está tentando excluir sejam realmente duplicados, digitando o SQL abaixo.
Etapa 2. Identificação de uma coluna chamada "Nomes
"No caso de uma coluna chamada" Nomes ", você substituiria" nome_da_coluna "por Nomes.
Etapa 3. Identificação de outras colunas
Se você estiver tentando identificar a duplicata por uma coluna diferente, por exemplo a idade de Alan em vez de seu nome, você deve inserir "Idades" no lugar de "column_name" e assim por diante.
selecione nome_da_coluna, contagem (nome_da_coluna) do grupo de tabelas por nome_da_coluna tendo contagem (nome_da_coluna)> 1;
Método 2 de 4: Excluindo uma única duplicata
Etapa 1. Selecione "nome entre os nomes
"Depois de" SQL ", que significa Linguagem de consulta padrão, digite" selecione o nome dos nomes ".
Etapa 2. Exclua todas as linhas com o nome duplicado
Depois de "SQL", digite "delete from names where name = 'Alan';." Observe que a capitalização é importante aqui, portanto, isso excluirá todas as linhas chamadas "Alan". Depois de "SQL", digite "commit".
Etapa 3. Alugue a linha sem uma duplicata
Agora que você excluiu todas as linhas com o nome de exemplo "Alan", pode inserir uma de volta digitando "inserir nos valores de nome ('Alan');." Depois de "SQL", digite "commit" para criar sua nova linha.
Etapa 4. Veja sua nova lista
Depois de concluir as etapas acima, você pode verificar se não tem mais registros duplicados digitando "selecionar * de nomes."
SQL> selecione o nome dos nomes; NAME ------------------------------ Alan Carrie Tom Alan linhas selecionadas. SQL> delete from names where name = 'Alan'; linhas excluídas. SQL> commit; Compromisso completo. SQL> inserir valores de nomes ('Alan'); linha criada. SQL> commit; Compromisso completo. SQL> selecione * a partir de nomes; NAME ------------------------------ Linhas selecionadas de Alan Carrie Tom.
Método 3 de 4: Excluindo várias duplicatas
Etapa 1. Selecione o RowID que deseja excluir
Depois de "SQL", digite "select rowid, name from names;."
Etapa 2. Exclua a duplicata
Depois de "SQL", digite "delete from names a where rowid> (selecione min (rowid) from names b where b.name = a.name);" para excluir registros duplicados.
Etapa 3. Verifique se há duplicatas
Depois de concluir o acima, os comandos verificam se você ainda tem registros duplicados digitando "select rowid, name from names;" e então "commit".
SQL> selecione rowid, nome de nomes; NOME DO ROWID ------------------ ------------------------------ AABJnsAAGAAAdfOAAA Alan AABJnsAAGAAAdfOAAB Alan AABJnsAAGAAAdfOAAC Carrie AABJnsAAGAAAdfOAAD Tom AABJnsAAGAAAdfOAAF Alan linhas selecionadas. SQL> deletar dos nomes a where rowid> (selecionar min (rowid) from names b where b.name = a.name); linhas excluídas. SQL> selecione rowid, nome de nomes; NOME DO ROWID ------------------ ------------------------------ AABJnsAAGAAAdfOAAA Alan AABJnsAAGAAAdfOAAC Carrie AABJnsAAGAAAdfOAAD Tom linhas selecionadas. SQL> commit; Compromisso completo.
Método 4 de 4: Excluindo Linhas com Colunas
Etapa 1. Selecione suas linhas
Depois de "SQL", digite "select * from names;" para ver suas linhas.
Etapa 2. Exclua as linhas duplicadas identificando suas colunas
Depois de "SQL '", digite "deletar dos nomes a onde rowid> (selecione min (rowid) dos nomes b onde b.name = a.name e b.age = a.age);" para excluir os registros duplicados.
Etapa 3. Verifique se há duplicatas
Depois de concluir as etapas acima, digite "selecionar * dos nomes;" e então "confirmar" para verificar se você excluiu os registros duplicados com sucesso.
SQL> selecione * a partir de nomes; NOME IDADE ------------------------------ ---------- Alan 50 Carrie 51 Tom 52 Alan 50 linhas selecionadas. SQL> excluir dos nomes a where rowid> (selecionar min (rowid) dos nomes b onde b.name = a.name e b.age = a.age); linha excluída. SQL> selecione * a partir de nomes; NOME IDADE ------------------------------ ---------- Alan 50 Carrie 51 Tom 52 linhas selecionadas. SQL> commit; Compromisso completo.
Avisos
-
Crie uma tabela de backup em seu próprio login que você pode usar para mostrar o que estava lá antes de qualquer exclusão ocorrer (caso haja alguma dúvida).
SQL> crie a tabela alan.names_backup como select * from names; Tabela criada.