Usuário com melhor resposta
Excluir conjunto de resultados

Pergunta
-
Preciso excluir os registros de acordo com o resultado da consulta abaixo:
SELECT * from usu_tplandep
INNER JOIN
(select * from USU_TPLANFUNC
WHERE (USU_NUMCAR = '' OR usu_numcar IS NULL)
AND EXISTS (SELECT 1
FROM R034FUN F
WHERE F.SITAFA IN (7)
AND F.NUMEMP = USU_NUMEMP
AND F.TIPCOL = USU_TIPCOL
AND F.NUMCAD = USU_NUMCAD)) PlanFunc
on usu_tplandep.usu_numemp = PlanFunc.usu_numemp and
usu_tplandep.usu_tipcol = PlanFunc.usu_tipcol and
usu_tplandep.usu_numcad = PlanFunc.usu_numcad and
usu_tplandep.usu_codpla = PlanFunc.usu_codpla and
usu_tplandep.usu_datinc = PlanFunc.usu_datincJá tentei delete diretamente, criar uma CTE e deletar a partir da CTE mas nada dar certo.
O que eu poderia fazer nessa situação ?
Respostas
-
DELETE A FROM usu_tplandep as A INNER JOIN (select * from USU_TPLANFUNC WHERE (USU_NUMCAR = '' OR usu_numcar IS NULL) AND EXISTS (SELECT 1 FROM R034FUN F WHERE F.SITAFA IN (7) AND F.NUMEMP = USU_NUMEMP AND F.TIPCOL = USU_TIPCOL AND F.NUMCAD = USU_NUMCAD)) PlanFunc on A.usu_numemp = PlanFunc.usu_numemp and A.usu_tipcol = PlanFunc.usu_tipcol and A.usu_numcad = PlanFunc.usu_numcad and A.usu_codpla = PlanFunc.usu_codpla and A.usu_datinc = PlanFunc.usu_datinc
tente dessa forma, mais só execute se realmente ter certeza do q for deletar.
obs. utilize begin tran e commit tran
Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino
- Sugerido como Resposta Roberson Ferreira _Moderator segunda-feira, 1 de outubro de 2012 14:35
- Marcado como Resposta Rapapell segunda-feira, 1 de outubro de 2012 16:01
Todas as Respostas
-
Rapapell,
Você poderia armazenar este resultado em uma outra tabela e através do operador Exists fazer uso no comando delete.
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
- Sugerido como Resposta Roberson Ferreira _Moderator segunda-feira, 1 de outubro de 2012 14:36
-
DELETE A FROM usu_tplandep as A INNER JOIN (select * from USU_TPLANFUNC WHERE (USU_NUMCAR = '' OR usu_numcar IS NULL) AND EXISTS (SELECT 1 FROM R034FUN F WHERE F.SITAFA IN (7) AND F.NUMEMP = USU_NUMEMP AND F.TIPCOL = USU_TIPCOL AND F.NUMCAD = USU_NUMCAD)) PlanFunc on A.usu_numemp = PlanFunc.usu_numemp and A.usu_tipcol = PlanFunc.usu_tipcol and A.usu_numcad = PlanFunc.usu_numcad and A.usu_codpla = PlanFunc.usu_codpla and A.usu_datinc = PlanFunc.usu_datinc
tente dessa forma, mais só execute se realmente ter certeza do q for deletar.
obs. utilize begin tran e commit tran
Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino
- Sugerido como Resposta Roberson Ferreira _Moderator segunda-feira, 1 de outubro de 2012 14:35
- Marcado como Resposta Rapapell segunda-feira, 1 de outubro de 2012 16:01
-
Leonardo,
Concordo com a sua sugestão, mas tenho receios, justamente por poder sem querer executar uma ação errado e excluir dados desnecessários.
A sugestão do begin tran e commit tran, já cria esta proteção.
Mas por isso eu indiquei armazenar os dados em uma tabela temporário e depois fazer uma comparação.
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
-
Penso que criar uma tabela temporária, como o Junior indicou, é válido para você primeiro garantir que suas junções e condições estão corretas.
Mas, depois de garantir isso, a deleção direta indicada pelo Leonardo já estaria de bom tom.
Roberson Ferreira - Database Developer
Acesse: www.robersonferreira.com.br
Email: contato@robersonferreira.com.brSe esta sugestão for útil, por favor, classifique-a como útil.
Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta. -
-
-