none
delete RRS feed

  • Pergunta

  • Bom dia. estou com a seguinte situação...

    tenho uma base onde o que se repete é so o nome numeroRegistro e tipoRegistro porem os repitidos no minimo um registro tem o numero do cpf e o resto nao tem... gostaria de saber se tem como eu fazer um delete na tabela onde a condicao fosse o resultado de um select onde esse select verificase os que sao iguais mais so me retornase os que estao com o campo cpf nulo.

    obs. todos esses registro tem um codigo unico.

    Agradeço pela atencao.
    segunda-feira, 25 de agosto de 2008 14:07

Todas as Respostas

  • Bom Dia,

     

    Fiquei um pouco confuso, você poderia exemplificar ?

     

    [ ]s,

     

    Gustavo

    segunda-feira, 25 de agosto de 2008 14:28
  •  

    veja bem =) ... eu tinha uma tabela onde eu ja tinha uma tabela de cadastro(tabela1) de pessoas e eu tive que unificar essa tabela com uma que existia em outro sistema (tabela2) ... dai eu fiquei com pessoas repetidas... mais como eu sei que sao repetidas... tipo é que o nome o numeroRegistro e o tipoRegistro sao iguais... mais as pessoas da tabela1 tem cpf e ja as da tabela2 nao tem ... e eu gostaria de excluir os registros da tabela2 que fossem igual ao da tabela1

     

    acho que deu pra clarear um pouco...

    obrigado pela atenção.

    segunda-feira, 25 de agosto de 2008 14:49
  • Olá Leonardo,

     

    Ficou bem mais claro. Veja o seguinte script:

     

    Code Snippet

    CREATE TABLE tblClientes (

    Nome VARCHAR(50),

    NumeroRegistro INT,

    TipoRegistro CHAR(1),

    CPF CHAR(11))

     

    INSERT INTO tblClientes VALUES ('Nome 1', 1,'C','70036708341')

    INSERT INTO tblClientes VALUES ('Nome 1', 1,'C',NULL)

    INSERT INTO tblClientes VALUES ('Nome 2', 1,'C','70036708342')

    INSERT INTO tblClientes VALUES ('Nome 2', 1,'C',NULL)

    INSERT INTO tblClientes VALUES ('Nome 3', 1,'C','70036708343')

     

    -- Recuperar os duplicados

    SELECT

    Nome,NumeroRegistro,TipoRegistro, COUNT(*) AS QTD

    FROM tblClientes

    GROUP BY Nome, NumeroRegistro, TipoRegistro

    HAVING COUNT(*) > 1

     

    -- Excluir duplicados sem o CPF (2005 based)

    WITH Cons AS (

    SELECT

    Nome,NumeroRegistro,TipoRegistro, COUNT(*) AS QTD

    FROM tblClientes

    GROUP BY Nome, NumeroRegistro, TipoRegistro

    HAVING COUNT(*) > 1)

     

    DELETE FROM tblClientes WHERE EXISTS

    (SELECT * FROM CONS WHERE

    tblClientes.Nome = Cons.Nome AND

    tblClientes.NumeroRegistro = Cons.NumeroRegistro AND

    tblClientes.TipoRegistro = Cons.TipoRegistro) AND

    CPF IS NULL

     

    -- Verificar

    SELECT Nome,NumeroRegistro,TipoRegistro, CPF

    FROM tblClientes

     

     

    [ ]s,

     

    Gustavo

     

    segunda-feira, 25 de agosto de 2008 15:06
  • Ola Gustavo... estarei testando o script e postando o resultado... muito obrigado pela atencao... ate mais.

    segunda-feira, 25 de agosto de 2008 15:09
  •  

    ola gustavo... pelo que observei o WITH é especifico para o SQL 2005 so que o meu é SQL 2000 ...

     

    =( como faço pra resolver isso?

    segunda-feira, 25 de agosto de 2008 17:43
  • Olá Leonardo,

     

    De fato o WITH é para o 2005 mas como você não especificou qual SQL Server você estava usando... Segue uma solução baseada em 2000.

     

    Code Snippet

    DELETE FROM tblClientes WHERE EXISTS (

    SELECT * FROM (

    SELECT

    Nome,NumeroRegistro,TipoRegistro, COUNT(*) AS QTD

    FROM tblClientes

    GROUP BY Nome, NumeroRegistro, TipoRegistro

    HAVING COUNT(*) > 1) AS CONS WHERE

    tblClientes.Nome = Cons.Nome AND

    tblClientes.NumeroRegistro = Cons.NumeroRegistro AND

    tblClientes.TipoRegistro = Cons.TipoRegistro) AND

    CPF IS NULL

     

     

    [ ]s,

     

    Gustavo

     

    segunda-feira, 25 de agosto de 2008 18:25