Anda dapat memanfaatkan tabel semu yang "dihapus" dalam contoh ini. Sesuatu seperti:
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;
Jelas Anda bisa melakukan 'keluaran dihapus.' pada hapus kedua juga, jika Anda membutuhkan sesuatu untuk digabungkan untuk tabel ketiga.
Sebagai catatan tambahan, Anda juga dapat melakukan penyisipan. * Pada pernyataan penyisipan, dan keduanya disisipkan. * Dan dihapus. * Pada pernyataan pembaruan.
EDIT:
Juga, apakah Anda mempertimbangkan untuk menambahkan pemicu pada table1 untuk menghapus dari table2 + 3? Anda akan berada di dalam transaksi implisit, dan juga akan mendapatkan pseudo-tabel "dimasukkan " dan "dihapus ".
Anda selalu bisa menyiapkan penghapusan berjenjang pada hubungan tabel.
Anda dapat merangkum beberapa penghapusan dalam satu prosedur yang tersimpan.
Anda dapat menggunakan transaksi untuk memastikan satu unit kerja.
sumber
Anda dapat menggunakan sintaks JOIN di klausa FROM di DELETE di SQL Server tetapi Anda masih menghapus dari tabel pertama saja dan ekstensi Transact-SQL miliknya yang merupakan alternatif untuk sub-kueri.
Dari contoh di sini :
sumber
Contoh untuk menghapus beberapa rekaman dari tabel master dan rekaman terkait dari dua tabel detail:
sumber
SELECT INTO #DeleteIds
alih-alihCREATE TABLE 'DeleteIds
diikuti olehINSERT INTO 'DeleteIds...
?Hanya ingin tahu .. apakah itu mungkin di MySQL? itu akan menghapus t1 dan t2? atau saya hanya salah memahami pertanyaan itu.
Tetapi jika Anda hanya ingin menghapus tabel1 dengan beberapa kondisi penggabungan, jangan alias tabel yang ingin Anda hapus
ini:
harus ditulis seperti ini untuk bekerja di MSSQL:
untuk membedakan bagaimana dua RDBMS umum lainnya melakukan operasi penghapusan:
http://mssql-to-postgresql.blogspot.com/2007/12/deleting-duplicates-in-postgresql-ms.html
sumber
Pada dasarnya, tidak, Anda harus membuat tiga pernyataan hapus dalam transaksi, anak-anak terlebih dahulu dan kemudian orang tua. Menyiapkan cascading delete adalah ide yang bagus jika ini bukan hal yang hanya terjadi satu kali dan keberadaannya tidak akan bertentangan dengan pengaturan pemicu yang ada.
sumber
Di SQL server, tidak ada cara untuk menghapus beberapa tabel menggunakan join. Jadi Anda harus menghapus dari anak terlebih dahulu sebelum menghapus formulir induk.
sumber
Ini adalah cara alternatif untuk menghapus catatan tanpa meninggalkan yatim piatu.
sumber
Semua telah ditunjukkan. Cukup gunakan salah satu
DELETE ON CASCADE
dari induknyatable
atau hapus darichild-table
keparent
.sumber
Seperti yang telah ditunjukkan oleh Aaron, Anda dapat mengatur perilaku delete ke CASCADE dan itu akan menghapus rekaman anak ketika rekaman induk dihapus. Kecuali jika Anda ingin keajaiban lain terjadi (dalam hal ini poin 2, 3 dari balasan Aaron akan berguna), saya tidak mengerti mengapa Anda perlu menghapus dengan gabungan dalam.
sumber
Untuk mengembangkan jawaban John Gibb, untuk menghapus sekumpulan data dalam dua tabel dengan hubungan FK:
sumber
sumber
$ sql = "DELETE FROM
basic_tbl
,education_tbl
,personal_tbl
,address_tbl
,department_tbl
MENGGUNAKANbasic_tbl
,education_tbl
,personal_tbl
,address_tbl
,department_tbl
MANAb_id
=e_id
=p_id
=a_id
=d_id
= '" $ id.. "' "; $ rs = mysqli_query ($ con, $ sql);sumber