【问题标题】:MySQL query for multiple tables being secondary tables multiple items?MySQL查询多个表是辅助表多个项目?
【发布时间】:2011-06-24 19:43:18
【问题描述】:

我有一个查询,我目前从以下 2 个表中获取信息:

SELECT g.name 
FROM site_access b 
    JOIN groups g 
        ON b.group_id = g.id 
WHERE b.site_id = 1 
ORDER BY g.status ASC

现在我想用这个查询创建另一个表,但是这个表会返回多于 1 行,这可能吗?

我所能做的就是从该表中拉出 1 行,我想要的字段是一个字符串字段,只要可以在此查询中将所有匹配项放在一起,也可以使用分隔符连接结果。

如果您需要有关表的更多信息或任何内容,请随意说我认为不需要,因为这主要是如何从联接/选择查询中提取多行的示例。

更新上述查询的结果:

Admin
Member
Banned

现在在我的第三张表中,每个访问权限都有允许使用的命令,因此第三张表将列出每个人可以访问的命令,例如:

Admin - add, del, announce
Member - find
Banned - none

更新2:

  • site_access

    site_id
    group_id
    
  • id
    name
    status
    
  • groups_commands

    group_id
    command_id
    
  • 命令

    id
    name
    

【问题讨论】:

  • 您是说要将新加入的表concatenated 返回的所有列值放在一行中吗?
  • @Joe Stefanelli 是否需要连接我想知道是否可以从上述查询中的第三个连接表中检索所有行。仅上面的查询就会给我 8 行,这 8 行中的每一行都会有来自表中第三个连接的 X 行

标签: mysql join


【解决方案1】:
SELECT g.name, GROUP_CONCAT(c.command) AS commands
FROM site_access b 
    JOIN groups g 
        ON b.group_id = g.id 
    JOIN groups_commands gc
        ON g.id = gc.group_id
    JOIN commands c
        ON gc.command_id = c.id
WHERE b.site_id = 1 
GROUP BY g.name
ORDER BY g.status ASC

【讨论】:

  • Stefanelli,谢谢我刚刚忘记了一件小事,我有 groups_commands,我有从 group_id 到 command_id 的关系,从那里我拉出字符串,所以它实际上是 2 个表,所以我可以使用INNER JOIN 上面的命令 join 对吗?
  • @Prix:对。我会调整答案以反映这一点。
  • 非常感谢,我还用表格样本更新了我的问题,非常感谢您的帮助,我对所有这些 JOIN、LEFT、RIGHT INNER 的东西仍然不太擅长。
  • 您的查询工作得非常好我的印象是我必须更像一个内部选择,或者有一种方法可以对先前的连接进行内部连接,但你只用 JOIN 就完成了;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-20
  • 2020-08-16
相关资源
最近更新 更多