当前位置: 首页 > 知识库问答 >
问题:

MYSQL Join 3表--使用第二个Join的结果进行第三个Join

习华灿
2023-03-14

我有三张桌子:

表名:流派

表字段:id、名称

例1,行动

我试图有一个查询,得到所有的信息从动漫,也得到我的动漫的流派名称。

我有以下疑问:

SELECT a.*, g.genres FROM anime as a
INNER JOIN (SELECT anime_id, GROUP_CONCAT(genre_id) as genres FROM anime_genres GROUP BY anime_id) as g ON a.id = g.anime_id

这让我得到了动漫信息和所有流派的主要ID,但我没有他们的名字。

SELECT a_g.*,
       GROUP_CONCAT((SELECT name FROM genres AS g WHERE g.id = a_g.genre_id)) as genre_names
FROM anime_genres as a_g
WHERE a_g.anime_id = 1
SELECT a.*,
       (SELECT GROUP_CONCAT(name) FROM genres as g WHERE g.id IN ((SELECT GROUP_CONCAT(genre_id) FROM anime_genres as a_g WHERE a.id = a_g.anime_id))) as genres
FROM anime as a
WHERE a.id = 1

我一直在研究,但也许我做得不对。

顺便说一句,“动漫”是一个电视节目,所以它可以有多种流派,一对多的关系。

共有1个答案

柳飞飙
2023-03-14

这就是你想要的吗?

SELECT a.*,
       (SELECT GROUP_CONCAT(g.name)
        FROM anime_genres ag JOIN
             genres g
             ON g.id = ag.genre_id)
        WHERE ag.anime_id = a.id
       ) as genre_names
FROM anime a;

基本上,您似乎希望在子查询中使用join以及相关子句。

 类似资料:
  • 我希望表的所有都具有,其被的重写。 结果应该变成: 我可以通过单独的查询获得它,例如: 第二个查询的结果应该合并到第一个查询中,这样:“当第二个表中的boolean为TRUE时,用第一个表覆盖第二个表的结果” role_cap和enduser_cap表中的正确值都应该成为结果的一部分。但是,如果对于相同的user_cap_id,role_cap有FALSE条目,而enduser_cap有TRUE条

  • 问题内容: 我有一个表和一个表,对于每个有付款的用户,表中可能有多个关联的付款。我想选择所有有付款的用户,但只选择他们最近的付款。我正在尝试使用此SQL,但之前从未尝试过嵌套SQL语句,所以我想知道自己在做什么错。感谢帮助 问题答案: 您需要有一个子查询,以获取每个日期的最新日期。

  • 我有三张桌子,桌子A,桌子B和桌子C 我想将数据从TableA列DateA迁移到TableB列DateB,仅当表B中的date字段为空时(我不想覆盖任何现有数据) 我需要使用TableC连接TableA和TableB,以匹配应按其RobotNumber更新的A行和B行。 表格a 表格c 我尝试连接这些表并执行如下更新,但查询超时:

  • 问题内容: 所以我有这个查询,完美地工作: 假设我还有一个包含电话号码的表,对于“用户”来说,用户可以有任意数量的电话号码…我该如何处理与类别完全相同的事情?换句话说,我想获得另一列,其中包含在“电话”表中找到的所有具有相同“ user_id”的phone_numbers,并将它们连接在一起(phone1,phone2,phone3)?我试过了: 运气不好…或者至少执行了查询,但是它做了一些奇怪的

  • 第二课: 画第一个三角形 这将又是一篇长教程。 用OpenGL 3实现复杂的东西很方便;为此付出的代价是,画一个简单的三角形变得比较麻烦。 不要忘了,定期复制粘贴,跑一下代码。 如果程序启动时崩溃了,很可能是你从错误的目录下运行了它。请仔细地阅读第一课中讲到的如何配置Visual Studio! 顶点数组对象(VAO) 你需要创建一个顶点数组对象,并将它设为当前对象(细节暂不深入): GLuint

  • 我需要进行异步调用,并使用其中存在的一些值对同一服务进行多次调用。将这些调用的响应与第一个调用结合起来,然后返回。 例如,当我第一次调用时,我会在JSON下面看到一个ID列表。现在,我必须使用这些ID对一个服务进行多次调用,并列出它们的响应列表,然后通过在同一个JSON中添加它们将其发送到下游。 我试过使用zipWhen和 但是结果列表总是以空或空的形式出现。我们如何才能做到这一点?我是不是漏了什