MySQL cách xóa dòng dự liệu ID có ở bàng này mà không có ở bảng kia

0
819
MYSQL delete row id not in other table
MySQL xóa dữ liệu dữ liệu bảng này không có mối liên hệ ở bảng kia – ảnh minh hỏa query

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

BÌNH LUẬN

Vui lòng nhập bình luận của bạn
Vui lòng nhập tên của bạn ở đây

− 1 = 1