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;
答
把它放在连接条件的第二个表
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
三江源都为这一点。完美的作品。 :) – Das123 2009-08-02 03:58:40