SQL根据id连接两行

时间:2015-07-16 18:55:33

标签: mysql sql

我试图基本上获得特定商家的所有标签,我希望每个商家都有一行包含所有标签(请参阅下面的内容,了解我当前查询的内容以及我希望的内容要得到)。一个商家可能有一堆标签,但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

1 个答案:

答案 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>