mysql - 多表 JOIN 问题

标签 mysql sql join

首先,你应该知道我在 SQL 上很烂。

这是我的问题:

我有 4 个表需要连接(用于 SphinxSearch),这是粗略的结构:

账户

Id Name Category
----------------
1  Test 1
2  Foo  2
3  Bar  1

类别

Id Name
-------
1  Restaurants
2  Store

Accounts_has_subcategory
account_id subcat_id
--------------------
1          1
1          3
2          2

子类别

Id Name
-------
1  Chinese
2  Sportswear
3  Delivery

我想要的是一个看起来像这样的结果集:

accounts.id | accounts.name | category_name | subcategories
-----------------------------------------------------------
1             Test            Restaurants     Chinese, Delivery
2             Foo             Store           Sportswear

我的查询是这样的:

SELECT a.id, a.name, c.name as category, group_concat(subcat.name) as subcategories
FROM accounts AS a
JOIN (account_has_subcategory AS ahs, subcategory AS subcat)
ON (a.id = ahs.account_id AND ahs.subcat_id = subcat.id),
accounts AS a2
JOIN category AS c
ON a2.category = c.id

如前所述,我很讨厌 SQL(只要它涉及多个连接或类似的东西,基本上...)。如果有人能给我指出正确的方向或提供解决方案(有基本的解释,这样我就可以试着把它记在脑子里 -_-),那将是我的一天,因为我已经为这个问题奋斗了 5 个小时现在……

谢谢。

最佳答案

试试这个?

SELECT a.id, a.name, 
       c.name as category, 
       group_concat(subcat.name) as subcategories
FROM accounts AS a
INNER JOIN account_has_subcategory AS ahs ON a.id = ahs.account_id
INNER JOIN subcategory AS subcat ON subcat.id = ahs.subcat_id
INNER JOIN category AS c ON a.category = c.id
GROUP BY a.id, a.name, c.name
ORDER BY a.id;

关于mysql - 多表 JOIN 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7180369/

相关文章:

mysql - 当子查询在 ON 条件下使用父查询的值时,会产生 'Unknown column' 错误

c# - 如何使用 LINQ 左连接多个表

mysql - SQL 连接同时具有一对一和一对多关系的表

MySQL 查询 : Return a single line of permissions per user id

php - CentOS 7 - 更新默认存储库中未找到的软件包

php - 上传多个文件 - 通知 : Array to string conversion in

java - 识别 <xsl :value-of> context item/node 的值

mysql - 使用按月分组查询

php - CodeIgniter - Group by with order by 不按预期工作

php - 主键错误(自动增量int)在php中调用存储过程