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

Truy vấn giá trị KHÔNG tồn tại trong bảng MySQL

Vấn đề: Tìm các giá trị từ danh sách không có trong bảng

Cho một tập giá trị (6, 7, 8), cần tìm những giá trị không tồn tại trong cột khóa chính của bảng.

Giải pháp: UNION ALL + NOT EXISTS

Tạo tập giá trị ảo bằng UNION ALL, sau đó lọc bằng NOT EXISTS.

1. Tạo bảng và dữ liệu

CREATE TABLE DemoTable (
    Value INT NOT NULL AUTO_INCREMENT PRIMARY KEY
);

INSERT INTO DemoTable VALUES (), (), (), (), (); -- Tự động tạo 1,2,3,4,5

2. Dữ liệu hiện có

+-------+
| Value |
+-------+
|     1 |
|     2 |
|     3 |
|     4 |
|     5 |
+-------+

3. Truy vấn tìm giá trị 6,7,8 không có trong bảng

SELECT tbl.Value
FROM (
    SELECT 6 AS Value UNION ALL
    SELECT 7 UNION ALL
    SELECT 8
) tbl
WHERE NOT EXISTS (
    SELECT 1 FROM DemoTable tbl1 WHERE tbl1.Value = tbl.Value
);

4. Kết quả

+-------+
| Value |
+-------+
|     6 |
|     7 |
|     8 |
+-------+

Giải thích

  • Subquery tbl tạo bảng tạm chứa các giá trị cần kiểm tra (6,7,8).
  • NOT EXISTS kiểm tra từng giá trị trong tbl có tồn tại trong DemoTable không.
  • SELECT 1 trong subquery tối ưu – không cần lấy dữ liệu thực, chỉ kiểm tra sự tồn tại.

Cách khác: LEFT JOIN

SELECT v.Value
FROM (
    SELECT 6 AS Value UNION ALL SELECT 7 UNION ALL SELECT 8
) v
LEFT JOIN DemoTable d ON d.Value = v.Value
WHERE d.Value IS NULL;

Ứng dụng

  • Kiểm tra tính toàn vẹn dữ liệu (missing IDs).
  • Tạo danh sách giá trị cần INSERT mới (upsert logic).
  • So sánh hai tập dữ liệu.