MySQL加入一对多关系的语法

时间:2009-08-02 03:15:16

标签: sql mysql join group-by

我有一种情况,我有一个标题表(t1)和另一个有多个链接的表,它们以一对多的关系引用这些标题(t2)。

我想要的是返回的标题的完整列表,其中包含一个标志,指示是否存在与之关联的特定链接。

左加入和分组依据:

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;

这很接近,因为它在refId列中给出了第一个link_id或NULL。

现在,如果我有一个特定的link_id而不是允许t2运行整个数据集,我如何约束结果呢?

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

WHERE t2.link_id = 123

我只获得了link_id匹配的几条记录,但我仍然需要在refId列中返回NULL的完整标题集,除非link_id = 123。

希望有人可以提供帮助

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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;