Tôi có mối quan hệ nhiều-nhiều trong MySQL liên quan đến ba bảng: tickets
, ticket_solutions
và solutions
. (. Một vé có thể có nhiều giải pháp, và các giải pháp áp dụng cho nhiều vé)Sử dụng phép nối bên ngoài bên trái cho mối quan hệ nhiều-nhiều, trong đó null được cho phép
Dưới đây là các cấu trúc bảng, đơn giản hóa:
tickets ticket_solutions solutions
----- ----- -----
id ticket_id id
solution_id solution
(Trong ví dụ này, tất cả các trường là INT
trừ solutions.solution
đó là VARCHAR
.) Vì một số vé không được hoàn thành nên có thể không có giải pháp nào.
Tôi đã viết các truy vấn sau đây:
SELECT t.id, GROUP_CONCAT(DISTINCT sol.solution SEPARATOR ', ') solutions
FROM tickets t
LEFT JOIN ticket_solutions tsol ON (tsol.ticket_id = t.id)
LEFT JOIN solutions sol ON (tsol.solution_id = sol.id)
GROUP BY t.id DESC;
Câu hỏi của tôi nằm với thứ hai LEFT JOIN
. Trong bất kỳ trường hợp nào có mục nhập trong bảng liên kết (ticket_solutions
) cho một vé nhất định, sẽ có luôn là là bản ghi để khớp trong solutions
. Tuy nhiên, nếu tôi cố gắng sử dụng INNER JOIN
thay vào đó, tôi không còn nhận được vé thiếu giải pháp.
Để suy nghĩ của tôi, thời gian duy nhất NULL
giá trị sẽ xảy ra là trong mối quan hệ giữa tickets
và bảng liên kết. (Vé chưa có giải pháp nào.)
Tôi có phải sử dụng LEFT JOIN
giữa bảng liên kết và solutions
mặc dù không có giá trị NULL
trong mối quan hệ cụ thể đó?
Nếu không, cấu trúc truy vấn được đề xuất là gì?
Đây chính là điều tôi đang tìm kiếm. Cảm ơn bạn. – JYelton