none
Deletar registros de várias tabelas com Inner Join RRS feed

  • Pergunta

  • Boa noite pessoal,

    Será que alguém conseguiria me ajudar com a dúvida abaixo? Não sei nem se existe essa possibilidade no SQL Server, mas vamos lá...

    Tenho a consulta abaixo que possui join com várias outras tabelas e preciso deletar o registro de todas essas tabelas que participam do join, para dessa forma não ter que ficar executando delete por delete em cada tabela com o seu campo chave.

    Isso seria possível? 

    SELECT DISTINCT
    A.FPL_CosIdentificadorUnico, 
    A.FPL_CDIRETESCSTRAB, 
    B.FPN_CDIRETESCSTRAB, 
    C.FPQ_CDIRETESCSTRAB, 
    C.FPQ_CDIRETESCSTRABEST, 
    D.FPU_CDIRETESCSTRABESTTRAB, 
    E.FPV_CDIRETESCSTRABESTTRAB
    FROM RetseSCSTrabs A 
    INNER JOIN RetseSCSTrabsTpsCalcs B ON (A.FPL_CDIRETESCSTRAB = B.FPN_CDIRETESCSTRAB)
    INNER JOIN RetseSCSTrabsEsts C ON (B.FPN_CDIRETESCSTRAB = C.FPQ_CDIRETESCSTRAB)
    INNER JOIN RetseSCSTrabsEstsTrabs D ON (C.FPQ_CDIRETESCSTRABEST = D.FPU_CDIRETESCSTRABEST)
    INNER JOIN RetseSCSTrabsEstsTrabsIts E ON (D.FPU_CDIRETESCSTRABESTTRAB = E.FPV_CDIRETESCSTRABESTTRAB)
    WHERE A.FPL_CosIdentificadorUnico = 'ID1023848710000002020051215275500000'


    Abaixo o resultado da consulta


    quarta-feira, 15 de julho de 2020 23:37

Respostas

  • Pessoal, dando uma pesquisada acabei encontrando apenas um modo de fazer utilizando a instrução Declare ficando da seguinte forma:

    DECLARE @Id AS varchar(36) SET @Id = 'ID1023848710000002020060415031500000' Delete from RetseSCSTrabsEstsTrabsIts where FPV_CdiReteSCSTrabEstTrab in (Select a.FPU_CdiReteSCSTrabEstTrab from RetseSCSTrabsEstsTrabs a inner join RetseSCSTrabsEsts on (a.FPU_CdiReteSCSTrabEst = FPQ_CdiReteSCSTrabEst) inner join RetseSCSTrabs B on (FPQ_CdiReteSCSTrab = b.FPL_CdiReteSCSTrab)  where b.FPL_CosIdentificadorUnico = @Id) Delete from RetseSCSTrabsEstsTrabs where FPU_CdiReteSCSTrabEst in (select a.FPQ_CdiReteSCSTrabEst from RetseSCSTrabsEsts a inner join RetseSCSTrabs on (a.FPQ_CdiReteSCSTrab = FPL_CdiReteSCSTrab) where FPL_CosIdentificadorUnico = @Id) Delete from RetseSCSTrabsEsts where FPQ_CdiReteSCSTrab in (Select a.FPL_CdiReteSCSTrab from RetseSCSTrabs a  where FPL_CosIdentificadorUnico = @Id) Delete from RetseSCSTrabsTpsCalcs where FPN_CdiReteSCSTrab in (Select a.FPL_CdiReteSCSTrab from RetseSCSTrabs a /*inner  join AltsContratuaiseSoc on (a.EQM_CdiAltContratualeSoc = SJJ_CdiAltContratualeSoc)*/ where FPL_CosIdentificadorUnico = @Id) Delete from RetseSCSTrabs where FPL_CosIdentificadorUnico = @Id; 

    Valeu!


    • Marcado como Resposta OHMLE quinta-feira, 16 de julho de 2020 13:40
    quinta-feira, 16 de julho de 2020 13:39

Todas as Respostas

  • Existe chaves referencias entre as tabelas? (Chave Primaria e estrangeira?)
    Foi definida como cascade? Se não, voce pode alterar a constraint para permitir delete em cascata, mas precisa ser muito bem avaliado para evitar desastres.

    Fabiano Carvalho

    quinta-feira, 16 de julho de 2020 12:01
  • Pessoal, dando uma pesquisada acabei encontrando apenas um modo de fazer utilizando a instrução Declare ficando da seguinte forma:

    DECLARE @Id AS varchar(36) SET @Id = 'ID1023848710000002020060415031500000' Delete from RetseSCSTrabsEstsTrabsIts where FPV_CdiReteSCSTrabEstTrab in (Select a.FPU_CdiReteSCSTrabEstTrab from RetseSCSTrabsEstsTrabs a inner join RetseSCSTrabsEsts on (a.FPU_CdiReteSCSTrabEst = FPQ_CdiReteSCSTrabEst) inner join RetseSCSTrabs B on (FPQ_CdiReteSCSTrab = b.FPL_CdiReteSCSTrab)  where b.FPL_CosIdentificadorUnico = @Id) Delete from RetseSCSTrabsEstsTrabs where FPU_CdiReteSCSTrabEst in (select a.FPQ_CdiReteSCSTrabEst from RetseSCSTrabsEsts a inner join RetseSCSTrabs on (a.FPQ_CdiReteSCSTrab = FPL_CdiReteSCSTrab) where FPL_CosIdentificadorUnico = @Id) Delete from RetseSCSTrabsEsts where FPQ_CdiReteSCSTrab in (Select a.FPL_CdiReteSCSTrab from RetseSCSTrabs a  where FPL_CosIdentificadorUnico = @Id) Delete from RetseSCSTrabsTpsCalcs where FPN_CdiReteSCSTrab in (Select a.FPL_CdiReteSCSTrab from RetseSCSTrabs a /*inner  join AltsContratuaiseSoc on (a.EQM_CdiAltContratualeSoc = SJJ_CdiAltContratualeSoc)*/ where FPL_CosIdentificadorUnico = @Id) Delete from RetseSCSTrabs where FPL_CosIdentificadorUnico = @Id; 

    Valeu!


    • Marcado como Resposta OHMLE quinta-feira, 16 de julho de 2020 13:40
    quinta-feira, 16 de julho de 2020 13:39