Saya mencoba menghapus entri anak yatim di tabel mysql.
Saya punya 2 tabel seperti ini:
Meja files
:
| id | ....
------------
| 1 | ....
| 2 | ....
| 7 | ....
| 9 | ....
meja blob
:
| fileid | ....
------------
| 1 | ....
| 2 | ....
| 3 | ....
| 4 | ....
| 4 | ....
| 4 | ....
| 9 | ....
The fileid
dan id
kolom dapat digunakan untuk bergabung dengan tabel bersama-sama.
Saya ingin menghapus semua baris dalam tabel di blob
mana fileid
tidak dapat ditemukan dalam tabel files.id
.
Jadi, gunakan contoh di atas yang akan menghapus baris: 3 & 4 (s) dalam blob
tabel.
null
s.Jawaban:
Menggunakan LEFT JOIN / IS NULL:
Menggunakan BUKAN ADA:
Menggunakan TIDAK DALAM:
Peringatan
Kapan pun memungkinkan, lakukan DELETE dalam suatu transaksi (dengan asumsi didukung - IE: Not on MyISAM) sehingga Anda dapat menggunakan rollback untuk mengembalikan perubahan jika terjadi masalah.
sumber
fileid
adalah non-nullable . Juga, solusi ketiga (NOT IN
) hanya membutuhkanf.id
non-nullable. Agaknya itu adalah kunci utama, jadi itu akan menjadi.sumber
NOT IN (NULL)
mengembalikan set hasil kosong sehingga NULL perlu dikecualikan. Namunid
kolom mungkin tidak akan dibatalkan karena itu "tidak diperlukan"not in(null)
cukup logis, Mengapa itu tidak berhasil? Apa alasan di balik itu?unknown
dan segala sesuatu baikfalse
atauunknown
dan tidak pernah dapat dievaluasitrue
sumber
files.id
danblob.fileid
. Saya menduga permintaan Anda akan menghasilkan kesalahan.sumber
NOT EXISTS
sudah diposting 9 tahun yang lalu. 4. Anda belum mempromosikan praktik terbaik menggunakan huruf kapital MySQL secara konsisten. Dengan kata lain, tidak ada yang layak dipertahankan di sini - inilah sebabnya saya juga memilih untuk menghapus posting ini.