Você pode tirar proveito da pseudotabela "excluída" neste exemplo. Algo como:
begin transaction;
declare @deletedIds table ( id int );
delete from t1
output deleted.id into @deletedIds
from table1 as t1
inner join table2 as t2
on t2.id = t1.id
inner join table3 as t3
on t3.id = t2.id;
delete from t2
from table2 as t2
inner join @deletedIds as d
on d.id = t2.id;
delete from t3
from table3 as t3 ...
commit transaction;
Obviamente, você pode fazer uma 'saída excluída'. na segunda, exclua também, se precisar de algo para se juntar à terceira mesa.
Como uma nota lateral, você também pode inserir. * Em uma instrução de inserção e ambos inseridos. * E deletados. * Em uma instrução de atualização.
EDIT:
Além disso, você considerou adicionar um gatilho na tabela 1 para excluir da tabela 2 + 3? Você estará dentro de uma transação implícita e também terá as pseudotabelas "inseridas " e "excluídas " disponíveis.
Você sempre pode configurar exclusões em cascata nas relações das tabelas.
Você pode encapsular as várias exclusões em um procedimento armazenado.
Você pode usar uma transação para garantir uma unidade de trabalho.
fonte
Você pode usar a sintaxe JOIN na cláusula FROM em DELETE no SQL Server, mas ainda assim exclui apenas da primeira tabela e sua extensão Transact-SQL proprietária, que é alternativa à subconsulta.
Do exemplo aqui :
fonte
Exemplo para excluir alguns registros da tabela mestre e os registros correspondentes de duas tabelas de detalhes:
fonte
SELECT INTO #DeleteIds
vez deCREATE TABLE 'DeleteIds
seguido porINSERT INTO 'DeleteIds...
?Basta saber .. isso é realmente possível no MySQL? ele vai deletar t1 e t2? ou eu apenas entendi mal a pergunta.
Mas se você apenas deseja excluir a tabela1 com várias condições de junção, apenas não crie um alias para a tabela que deseja excluir
isto:
deve ser escrito assim para funcionar em MSSQL:
para contrastar como os outros dois RDBMS comuns fazem uma operação de exclusão:
http://mssql-to-postgresql.blogspot.com/2007/12/deleting-duplicates-in-postgresql-ms.html
fonte
Basicamente, não, você precisa fazer três instruções delete em uma transação, primeiro os filhos e depois os pais. Configurar exclusões em cascata é uma boa ideia se isso não for uma coisa única e sua existência não conflitar com qualquer configuração de acionador existente.
fonte
No servidor SQL, não há como excluir várias tabelas usando join. Então você tem que deletar do filho antes de deletar o pai do formulário.
fonte
Esta é uma forma alternativa de excluir registros sem deixar órfãos.
fonte
Tudo foi apontado. Basta usar
DELETE ON CASCADE
no paitable
ou excluir dochild-table
paraparent
.fonte
Como Aaron já apontou, você pode definir o comportamento de exclusão para CASCADE e isso excluirá os registros filhos quando um registro pai for excluído. A menos que você queira que algum outro tipo de mágica aconteça (nesse caso, os pontos 2, 3 da resposta de Aaron seriam úteis), não vejo por que você precisaria excluir com junções internas.
fonte
Para desenvolver a resposta de John Gibb, para excluir um conjunto de dados em duas tabelas com uma relação FK:
fonte
fonte
$ sql = "DELETE FROM
basic_tbl
,education_tbl
,personal_tbl
,address_tbl
,department_tbl
UTILIZAÇÃObasic_tbl
,education_tbl
,personal_tbl
,address_tbl
,department_tbl
ONDEb_id
=e_id
=p_id
=a_id
=d_id
=" $ id. ".' "; $ rs = mysqli_query ($ con, $ sql);fonte