Ada 2 tabel, spawnlist
dan npc
, dan saya perlu menghapus data dari spawnlsit
.
npc_templateid = n.idTemplate
adalah satu-satunya hal yang "menghubungkan" tabel. Saya telah mencoba skrip ini tetapi tidak berhasil.
Saya sudah mencoba ini:
DELETE s FROM spawnlist s
INNER JOIN npc n ON s.npc_templateid = n.idTemplate
WHERE (n.type = "monster");
mysql
sql
sql-server
inner-join
sql-delete
Bergabunglah denganOG
sumber
sumber
Jawaban:
Tambahkan
.*
kes
di baris pertama Anda.Mencoba:
sumber
spawnlist
. Saya melihatl2revo.root.spawnlist
dandb.root.spawnlist
.AS
alias Anda.Jika basis datanya adalah InnoDB maka mungkin ide yang lebih baik untuk menggunakan kunci asing dan kaskade saat hapus, ini akan melakukan apa yang Anda inginkan dan juga tidak menghasilkan data yang berlebihan yang disimpan.
Untuk contoh ini, saya rasa Anda tidak memerlukan yang pertama:
Mungkin lebih baik memilih baris sebelum menghapus sehingga Anda yakin ingin menghapus apa yang Anda inginkan:
Anda juga dapat memeriksa sintaks penghapusan MySQL di sini: http://dev.mysql.com/doc/refman/5.0/en/delete.html
sumber
jika database adalah InnoDB Anda tidak perlu melakukan penggabungan dalam penghapusan. hanya
dapat digunakan untuk menghapus semua rekaman yang ditautkan dengan kunci asing di tabel lain, untuk melakukannya Anda harus terlebih dahulu menautkan tabel Anda dalam waktu desain.
jika Anda menggunakan MyISAM Anda dapat menghapus catatan yang bergabung seperti ini
di baris pertama saya telah menginisialisasi dua tabel temp untuk menghapus catatan, di baris kedua saya telah menetapkan tabel keberadaan ke a dan b tetapi di sini saya telah menghubungkan kedua tabel bersama dengan kata kunci gabung, dan saya telah mencocokkan kunci utama dan asing untuk kedua tabel yang membuat link, di baris terakhir saya telah memfilter record by field untuk dihapus.
sumber
type
sebenarnya ada di tabel lain, bukan dispawnlist
tabel, jadi perlu bergabung