我试图基本上获得特定商家的所有标签,我希望每个商家都有一行包含所有标签(请参阅下面的内容,了解我当前查询的内容以及我希望的内容要得到)。一个商家可能有一堆标签,但Tag的每一行只有一个商家。此外,商家和标签通过表商品标签关联,该商标标签仅保存标签的ID和商家的ID。
查询
select m.MerchantId, m.MerchantName, t.TagName
from Merchant m
inner join MerchantTags mt on m.MerchantId=mt.MerchantId
inner join tag t on mt.TagId=t.TagId
where m.MerchantId=162
结果
MerchantId | MerchantName | TagName
162 | merchant | tag1
162 | merchant | tag2
期望的结果
MerchantId | MerchantName | TagName | TagName
162 | merchant | tag1 | tag2
答案 0 :(得分:1)
我可能会使用GROUP_CONCAT
:
SELECT
m.MerchantId AS MerchantId,
m.MerchantName AS MerchantName,
GROUP_CONCAT(t.TagName) AS MerchantTags
FROM Merchant m
INNER JOIN MerchantTags mt
ON m.MerchantId=mt.MerchantId
INNER JOIN tag t
ON mt.TagId=t.TagId
WHERE m.MerchantId=?
GROUP BY m.MerchantId
这会产生如下输出:
MerchantId | MerchantName | MerchantTags
162 | merchant | tag1,tag2
您可以使用您正在使用的任何应用程序语言轻松地分解标记,这会为您提供固定数量的字段,而不是尝试创建可能具有未知列数的数据透视表类型的输出。 / p>