2009-08-02 25 views
8

Tôi có một tình huống mà tôi có một bảng tiêu đề (t1) và một bảng khác có nhiều liên kết tham chiếu các tiêu đề này (t2) trong mối quan hệ một đến nhiều.MySQL Tham gia cú pháp cho một hoặc nhiều mối quan hệ

Điều tôi muốn là danh sách đầy đủ các tiêu đề được trả lại bằng cờ cho biết có liên kết cụ thể nào được liên kết với nó hay không.

Left Tham gia và Nhóm By:

SELECT 
    t1.id 
    , t1.title 
    , t2.link_id AS refId 
FROM 
    t1 
    LEFT JOIN t2 
     ON (t1.id = t2.title_id) 
GROUP BY t1.id; 

này gần như nó mang lại cho tôi một trong hai LINK_ID đầu tiên hoặc NULL ở cột refId.

Bây giờ, làm cách nào để hạn chế kết quả nếu tôi có một link_id cụ thể thay vì cho phép t2 chạy qua toàn bộ tập dữ liệu?

Nếu tôi thêm một mệnh đề WHERE, ví dụ:

WHERE t2.link_id = 123 

tôi chỉ nhận được vài hồ sơ, nơi các trận đấu LINK_ID nhưng tôi vẫn cần tập hợp đầy đủ các danh hiệu trở lại với NULL ở cột refId trừ LINK_ID = 123.

Hope ai đó có thể giúp

Trả lời

13

Thay vì trong mệnh đề WHERE, đặt tiêu chí của bạn trong mệnh đề LEFT JOIN:

SELECT 
    t1.id 
    , t1.title 
    , t2.link_id AS refId 
FROM 
    t1 
    LEFT JOIN t2 
     ON t1.id = t2.title_id AND t2.link_id = 123 
GROUP BY t1.id; 
+0

Thankyou cả cho việc này. Hoạt động hoàn hảo. :) – Das123

4

Đặt nó trong điều kiện join cho bảng thứ hai

SELECT t1.id, t1.title, t2.link_id as refId 
FROM t1 
LEFT JOIN t2 ON t1 = t2.title_id AND t2.link_id = 123 
GROUP BY t1.id; 
+0

Không nên là: 'ON t1.id = t2.title_id'? Hoặc nó sẽ tự động lấy pk khi chỉ định bảng? –

Các vấn đề liên quan