Inquiridor
delete

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.
Todas as Respostas
-
-
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.
-
Olá Leonardo,
Ficou bem mais claro. Veja o seguinte script:
Code SnippetCREATE
TABLE tblClientes (Nome
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 QTDFROM
tblClientesGROUP
BY Nome, NumeroRegistro, TipoRegistroHAVING
COUNT(*) > 1-- Excluir duplicados sem o CPF (2005 based)
WITH
Cons AS (SELECT
Nome
FROM
GROUP
BY Nome, NumeroRegistro, TipoRegistroHAVING
COUNT(*) > 1)DELETE
FROM tblClientes WHERE EXISTS(
SELECT * FROM CONS WHEREtblClientes
tblClientes
.NumeroRegistro = Cons.NumeroRegistro ANDtblClientes
.TipoRegistro = Cons.TipoRegistro) ANDCPF
IS NULL-- Verificar
SELECT
Nome,NumeroRegistro,TipoRegistro, CPFFROM
tblClientes[ ]s,
Gustavo
-
-
-
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 SnippetDELETE
FROM tblClientes WHERE EXISTS (SELECT * FROM (
SELECT
Nome
FROM
GROUP
BY Nome, NumeroRegistro, TipoRegistroHAVING
COUNT(*) > 1) AS CONS WHEREtblClientes
.Nome = Cons.Nome ANDtblClientes
.NumeroRegistro = Cons.NumeroRegistro ANDtblClientes
.TipoRegistro = Cons.TipoRegistro) ANDCPF
IS NULL[ ]s,
Gustavo