DELETE với điều kiện so sánh 2 cột bằng nhau
Sử dụng DELETE ... WHERE col1 = col2 để xóa các hàng mà 2 cột số (hoặc chuỗi) có giá trị giống hệt nhau.
1. Tạo bảng và chèn dữ liệu
mysql> CREATE TABLE DemoTable (
Name VARCHAR(40),
Score1 INT,
Score2 INT
);
mysql> INSERT INTO DemoTable VALUES
('John', 56, 76), ('Chris', 77, 77), ('David', 89, 98);
2. Xem dữ liệu
mysql> SELECT * FROM DemoTable;
+-------+--------+--------+ | Name | Score1 | Score2 | +-------+--------+--------+ | John | 56 | 76 | | Chris | 77 | 77 | ← Score1 = Score2 | David | 89 | 98 | +-------+--------+--------+
3. Truy vấn: Xóa hàng có Score1 = Score2
mysql> DELETE FROM DemoTable WHERE Score1 = Score2;
Kết quả: Query OK, 1 row affected (xóa Chris)
4. Kiểm tra sau xóa
mysql> SELECT * FROM DemoTable;
+-------+--------+--------+ | Name | Score1 | Score2 | +-------+--------+--------+ | John | 56 | 76 | | David | 89 | 98 | +-------+--------+--------+
Mở rộng - Các điều kiện so sánh hữu ích:
WHERE col1 = col2: Bằng nhauWHERE col1 <> col2/WHERE col1 != col2: Khác nhauWHERE col1 > col2: Lớn hơnWHERE col1 BETWEEN col2 AND col3: Trong khoảngWHERE col1 IN (col2, col3, col4): Bằng một trong các cột khác
Cẩn trọng: Luôn chạy SELECT * FROM DemoTable WHERE Score1 = Score2 trước để xem trước dữ liệu sẽ bị xóa.
Với chuỗi (VARCHAR): So sánh mặc định case-insensitive (collation _ci). Dùng WHERE BINARY col1 = col2 để so sánh case-sensitive.