
Ví dụ: Chúng ta có 2 table files, blob như sau
table[files]
| id | ....
------------
| 1 | ....
| 2 | ....
| 7 | ....
| 9 | ....
table[blob]
| fileid | ....
------------
| 1 | ....
| 2 | ....
| 3 | ....
| 4 | ....
| 4 | ....
| 7 | ....
| 9 | ....
2 table trên có mối quan hệ 1-n, nhìn trực quan các bạn thấy table[blob] dư thừa dữ liệu ở các dòng có ID là 3,4. Lúc này các bạn cần xóa bỏ dữ liệu rác ở table[blob], nhantam sẽ hướng dẫn một số phát biểu MYSQL để xóa dữ liệu rác trong table[blob]
1. Sử dụng LEFT JOIN/IS NULL:
DELETE b FROM blob
LEFT JOIN files f ON f.id = b.fileid
WHERE f.id IS NULL
2. Sử dụng NOT EXISTS
DELETE FROM blob
WHERE NOT EXISTS(SELECT NULL
FROM files f
WHERE f.id = fileid)
3. Sử dụng NOT IN
DELETE FROM blob
WHERE fileid NOT IN (SELECT f.id
FROM files f)
Trên đây là một số cách để xóa dữ liệu có ở table này nhưng không có ở table kia (hoặc dữ liệu rác ở các table có mối quan hệ 1-n).
Lưu ý:
– Các bạn nên backup lại db trước khi phát biểu thao tác xóa, đề phòng restore lại trong những trường hợp có sai sót nào đó.
Chúc các bạn thành công
nhantam
Lập trình phần mềm web app tại Panpic