首先,你应该知道我在 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/