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

Duy trì mối quan hệ bảng dựa trên dữ liệu trong MySQL bằng JOIN và CASE

Đôi khi chúng ta cần nối các bảng có mối quan hệ được xác định bởi dữ liệu (data-driven). Điều này có thể thực hiện bằng câu lệnh CASE trong mệnh đề SELECT để xử lý các khả năng nối khác nhau.

Ví dụ minh họa

Bảng chính Student_Detail:

mysql> SELECT * FROM student_detail;
+----+---------+
| Id | Name    |
+----+---------+
| 1  | Harshit |
| 2  | Rahul   |
| 3  | Aarav   |
+----+---------+

Ba bảng ghi chú riêng cho từng học sinh:

mysql> SELECT * FROM Student_Harshit;
+----+-----------+
| Id | Remarks   |
+----+-----------+
| 1  | Excellent |
+----+-----------+

mysql> SELECT * FROM Student_Rahul;
+----+---------+
| Id | Remarks |
+----+---------+
| 2  | Average |
+----+---------+

mysql> SELECT * FROM Student_Aarav;
+----+-------------+
| Id | Remarks     |
+----+-------------+
| 3  | Intelligent |
+----+-------------+

Truy vấn xử lý quan hệ data-driven

mysql> SELECT 
    sd.id, 
    sd.name, 
    CASE name 
        WHEN 'Harshit' THEN H1.Remarks 
        WHEN 'Rahul' THEN R1.Remarks 
        WHEN 'Aarav' THEN A1.Remarks 
        ELSE 'Error' 
    END AS REMARKS
FROM Student_detail AS sd
LEFT JOIN Student_Harshit AS H1 ON sd.id = H1.id
LEFT JOIN Student_Rahul AS R1 ON sd.id = R1.id
LEFT JOIN Student_Aarav AS A1 ON sd.id = A1.id;

Kết quả

+----+---------+-------------+
| id | name    | REMARKS     |
+----+---------+-------------+
| 1  | Harshit | Excellent   |
| 2  | Rahul   | Average     |
| 3  | Aarav   | Intelligent |
+----+---------+-------------+

Lưu ý: Cách này phù hợp khi số lượng bảng con nhỏ và cố định. Với số lượng lớn, nên thiết kế lại schema sử dụng khóa ngoại chuẩn.