Skenario:
Katakanlah saya punya dua tabel, TableA dan TableB. Kunci utama TableB adalah kolom tunggal (BId), dan merupakan kolom kunci asing di TableA.
Dalam situasi saya, saya ingin menghapus semua baris di TableA yang terkait dengan baris tertentu di TableB: Dapatkah saya melakukannya melalui gabungan? Hapus semua baris yang ditarik dari gabungan?
DELETE FROM TableA
FROM
TableA a
INNER JOIN TableB b
ON b.BId = a.BId
AND [my filter condition]
Atau apakah saya terpaksa melakukan ini:
DELETE FROM TableA
WHERE
BId IN (SELECT BId FROM TableB WHERE [my filter condition])
Alasan saya bertanya adalah bagi saya sepertinya opsi pertama akan jauh lebih efisien ketika berhadapan dengan tabel yang lebih besar.
Terima kasih!
DELETE TableA, TableB ...
dan itu benar-benar menghapus catatan yang relevan dari keduanya. Bagus.DELETE from TableA a using TableB b where b.Bid = a.Bid and [my filter condition]
DELETE a FROM TableA a INNER JOIN TableB b on b.Bid = a.Bid and [my filter condition]
Saya akan menggunakan sintaks ini
sumber
Ya kamu bisa. Contoh:
sumber
Sedang mencoba melakukan ini dengan akses database dan menemukan saya perlu menggunakan . * Tepat setelah penghapusan.
sumber
Hampir sama di MySQL , tetapi Anda harus menggunakan tabel alias tepat setelah kata "DELETE":
sumber
Sintaks di atas tidak berfungsi di Interbase 2007. Sebagai gantinya, saya harus menggunakan sesuatu seperti:
(Catatan Interbase tidak mendukung kata kunci AS untuk alias)
sumber
Saya menggunakan ini
dan cara @TheTXI cukup baik tetapi saya membaca jawaban dan komentar dan saya menemukan satu hal yang harus dijawab adalah menggunakan kondisi dalam klausa WHERE atau sebagai kondisi bergabung. Jadi saya memutuskan untuk mengujinya dan menulis cuplikan tetapi tidak menemukan perbedaan yang berarti di antara mereka. Anda dapat melihat skrip sql di sini dan poin pentingnya adalah bahwa saya lebih suka menuliskannya sebagai commnet karena ini bukan jawaban yang pasti tetapi besar dan tidak dapat dimasukkan ke dalam komentar, maafkan saya.
Jika Anda bisa mendapatkan alasan yang bagus dari skrip ini atau menulis yang bermanfaat lainnya, silakan bagikan. Terima kasih dan harap bantuan ini.
sumber
Katakanlah Anda memiliki 2 tabel, satu dengan set Master (mis. Karyawan) dan satu dengan set anak (mis. Tanggungan) dan Anda ingin menyingkirkan semua baris data dalam tabel Dependen yang tidak dapat memasukkan kunci dengan baris apa pun di tabel Master.
Poin yang perlu diperhatikan di sini adalah Anda hanya mengumpulkan 'larik' EmpID dari join terlebih dahulu, menggunakan set EmpID tersebut untuk melakukan operasi Penghapusan pada tabel Dependents.
sumber
Dalam SQLite, satu-satunya hal yang berfungsi adalah sesuatu yang mirip dengan jawaban beauXjames.
Tampaknya turun ke ini
DELETE FROM table1 WHERE table1.col1 IN (SOME TEMPORARY TABLE);
dan bahwa beberapa tabel sementara dapat dibuat oleh SELECT dan GABUNG dua tabel Anda yang Anda bisa memfilter tabel sementara ini berdasarkan kondisi yang Anda ingin menghapus catatan di Table1.sumber
Anda dapat menjalankan kueri ini: -
sumber
Cara yang lebih sederhana adalah:
sumber
Minimalkan penggunaan kueri DML dengan Bergabung. Anda harus dapat melakukan sebagian besar dari semua kueri DML dengan subkueri seperti di atas.
Secara umum, gabungan hanya boleh digunakan ketika Anda perlu SELECT atau GROUP dengan kolom dalam 2 tabel atau lebih. Jika Anda hanya menyentuh beberapa tabel untuk menentukan populasi, gunakan subqueries. Untuk kueri HAPUS, gunakan subquery berkorelasi.
sumber