Mysql 多表连接问题
首先,你应该知道我在SQL方面做得很差劲 我的问题是: 我有4个表需要连接(用于SphinxSearch),以下是大致结构: 账户 类别 帐户有子类别 子类别 我想要的是一个如下所示的结果集:Mysql 多表连接问题,mysql,sql,join,Mysql,Sql,Join,首先,你应该知道我在SQL方面做得很差劲 我的问题是: 我有4个表需要连接(用于SphinxSearch),以下是大致结构: 账户 类别 帐户有子类别 子类别 我想要的是一个如下所示的结果集: accounts.id | accounts.name | category_name | subcategories ----------------------------------------------------------- 1 Test Res
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
对,我的查询如下所示:
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;
试试这个
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;
您就快到了-您只需要稍微修改一下语法并添加一个groupby
select a.id, a.name, c.name as category, group_concat(subcat.name) as subcategories
from accounts as a
inner join category as c on a.category = c.id
inner join accounts_has_subcategory as ahs on a.id = ahs.account_id
inner join subcategory as subcat on ahs.subcat_id = subcat.id
group by a.id, a.name, c.name
你几乎到了——你只需要稍微修改一下语法,然后按添加一个组
select a.id, a.name, c.name as category, group_concat(subcat.name) as subcategories
from accounts as a
inner join category as c on a.category = c.id
inner join accounts_has_subcategory as ahs on a.id = ahs.account_id
inner join subcategory as subcat on ahs.subcat_id = subcat.id
group by a.id, a.name, c.name
非常感谢,这很有效。(必须等待7分钟才能批准你的答案)非常感谢,这很有效。(必须等待7分钟才能批准您的答案)