MySQL加入一对多关系的语法

问题描述:

我有一种情况,其中有一个标题表(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.

希望有人能帮助

取而代之的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

把它放在连接条件的第二个表

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