Đô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.