2009-08-02 68 views
8

我有一種情況,其中有一個標題表(t1),另一個表中有多個鏈接,它們以一對多關係引用這些標題(t2)。MySQL加入一對多關係的語法

我想要的是帶有標誌返回的標題的完整列表,該標誌指示是否存在與其關聯的特定鏈接。

左聯接和GROUP 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; 

這是接近,因爲它給了我要麼第一link_id或NULL在REFID列。

現在,我如何限制結果,如果我有一個特定的link_id而不是讓t2運行整個數據集?

如果我添加一個WHERE子句,例如:

WHERE t2.link_id = 123 

我只得到幾條記錄,其中link_id的比賽,但我仍需要全套的標題在REFID柱返回NULL,除非link_id = 123.

希望有人能幫助

回答

13

取而代之的WHERE子句中,把你的標準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

三江源都爲這一點。完美的作品。 :) – Das123 2009-08-02 03:58:40

4

把它放在連接條件的第二個表

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

不應該是:`ON t1.id = t2.title_id`?或者當它指定表時會自動採用pk? – 2011-04-29 06:28:07