【问题标题】:MySQL Join syntax for one to many relationshipMySQL Join 一对多关系的语法
【发布时间】:2010-11-16 03:02:14
【问题描述】:

我有一种情况,我有一个标题表 (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 列中返回的完整标题集,除非 link_id = 123。

希望有人能帮忙

【问题讨论】:

    标签: sql mysql join group-by


    【解决方案1】:

    而不是在 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;
    

    【讨论】:

    • 谢谢你们俩。完美运行。 :)
    【解决方案2】:

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

    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;
    

    【讨论】:

    • 应该是:ON t1.id = t2.title_id 吗?还是会在指定表的时候自动取pk?
    猜你喜欢
    • 1970-01-01
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    • 2014-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多