Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Loại bỏ hàng dựa trên giá trị cột khi tìm thấy giá trị trùng lặp cột khác trong MySQL

Tạo bảng điểm sinh viên (có StudentId trùng)

mysql> CREATE TABLE DemoTable1427 (StudentId INT, StudentMarks INT);
INSERT INTO DemoTable1427 VALUES(201,89),(201,99),(210,98);

Dữ liệu

mysql> SELECT * FROM DemoTable1427;
+-----------+--------------+
| StudentId | StudentMarks |
+-----------+--------------+
| 201       | 89           |
| 201       | 99           |
| 210       | 98           |
+-----------+--------------+

Yêu cầu: Loại bỏ toàn bộ StudentId có bất kỳ hàng nào StudentMarks = 89

StudentId 201 có hàng Marks=89, nên cả hai hàng của 201 đều bị loại.

Truy vấn: NOT IN subquery

mysql> SELECT * FROM DemoTable1427
    -> WHERE StudentId NOT IN (
    ->   SELECT DISTINCT StudentId FROM DemoTable1427 WHERE StudentMarks = 89
    -> );

Kết quả: Chỉ StudentId 210

+-----------+--------------+
| StudentId | StudentMarks |
+-----------+--------------+
| 210       | 98           |
+-----------+--------------+

Lưu ý: NOT IN với subquery trả về NULL sẽ không khớp hàng nào. Đảm bảo subquery không trả về NULL (dùng WHERE StudentId IS NOT NULL hoặc NOT EXISTS an toàn hơn).