【问题标题】:Join all link table entries in one single row将所有链接表条目连接在一行中
【发布时间】:2018-07-24 13:59:38
【问题描述】:

我一直在尝试获取一个查询,该查询允许我将一个事件的所有音乐流派(链接表)放在一行中,但到目前为止我一直很不成功;它不断返回 2 行,其中每行都包含有关事件的相同信息,但在 LEFT JOIN 处更改了音乐流派条目。这是我的查询:

SELECT 
    events.*
    , music_genres_link.* 
FROM events 
LEFT JOIN music_genres_link 
    ON events.id = music_genres_link.event_id 
WHERE events.id=1 
ORDER BY date DESC 

这是它返回的内容:

如何将这两行合并为一行?我需要genre_title 和genre_id 列。

我想获取整个事件行并左连接结果左侧链接表中找到的所有音乐流派,如下所示:

[事件结果] [music_genre_1 (id, title)] [music_genre_2 (id, title)] 等

【问题讨论】:

  • 分享您的样本数据和预期结果集?
  • 这不是一个完整的问题。请包括两个原始表格的样本数据。我们无法真正分解您的结果集链接(请勿发布链接)。

标签: mysql sql


【解决方案1】:

我怀疑你只是想要group_concat():

SELECT e.*, GROUP_CONCAT(mgl.genre_title) as genres
FROM events e LEFT JOIN
     music_genres_link mgl
     ON e.id = mgl.event_id 
WHERE e.id = 1 
GROUP BY e.id;

这假设您只需要genre_title。如果你想要genre_id,那么你可以添加另一列。

【讨论】:

    【解决方案2】:

    您似乎有 2 行与 music_genres_link 中的联接匹配。您可以从两个 'gender_id' 值 - 5 和 295 中看到这一点。

    好的,现在您已经编辑了您的问题,您想要一些不典型的 SQL。您可以使用PIVOT 实现这一目标,但您对流派的数量没有限制,我不推荐它。您需要重新考虑您的表格以及您想要实现的目标。

    【讨论】:

    • 确实如此。但是如何让它们排成一行呢?
    • 一种方法是选择您想要的并将其添加到wherejoin 子句中
    • Dimo raichev 是绝对正确的——你必须首先定义:它们应该如何组合成一行?您想保留一排并摆脱另一排吗?您想通过逗号分隔值列表将它们组合在一起吗?有多种可能性...
    • @IuriDias 您的数据似乎不一致,为什么您有 2 种不同 ID 和相同名称的性别类型
    • @dimoraichev 这是对我在服务器上的 JSON 文件的引用。
    猜你喜欢
    • 2021-07-09
    • 2016-12-15
    • 2013-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-31
    • 1970-01-01
    相关资源
    最近更新 更多