MYSQL Concat 几行并连接几张表
Posted
技术标签:
【中文标题】MYSQL Concat 几行并连接几张表【英文标题】:MYSQL Concat several rows and join several tables 【发布时间】:2017-08-01 12:02:48 【问题描述】:我有以下表结构:
tMaster
City ClientId ProductId
-------------------------------------
1 1 1
1 1 N
2 1 1
2 2 3
N N N
tCity
CityId CityName
----------------------
1 City1
2 City2
N CityN
tClient
ClientId ClientName
----------------------
1 ClientName1
2 ClientName2
N ClientNameN
tProduct
ProductId ProductName
-------------------------------------
1 ProductName1
2 ProductName2
3 ProductName3
N ProductNameN
我的 SQL 是:
SELECT idCity,
GROUP_CONCAT(DISTINCT ClientId , "|" ,ProductId ORDER BY ClientId) AS StringResult
FROM tMaster
GROUP BY idCity
ORDER BY idCity
所以,我的结果是:
idCity StringResult
---------------------------------------------------------
1 ClientId1|ProductId1,ClientIdN|ProductIdN
2 ClientId1|ProductId1,ClientId2|ProductId3
但我需要从 tCity、tClient 和 tProduct 中获取 CityName、ClientName 和 ProductName
idCity City StringResult
---------------------------------------------------------
1 City1 ClientId1|ClientName1|Product1|ProductName1,ClientN|ClientNameN|ProductIdN|ProductNameN
2 City2 ClientId1|ClientName1|ProductId1|ProductName1,ClientId2|ClientName2|ProductId3|ProductName3
有什么办法吗?
【问题讨论】:
【参考方案1】:您没有在 SELECT 语句中包含这些列,因此您不会在输出中得到这些列。试试这样的:
SELECT idCity, CityName, ClientName, ProductName
GROUP_CONCAT(
DISTINCT tMaster.ClientId , "|" , CityName, "|", ClientName, "|",
ProductId , "|", ProductName ORDER BY tMaster.ClientId) AS StringResult
FROM tMaster
INNER JOIN tCity ON tMaster.city = tCity.CityId
INNER JOIN tClient ON tMaster.ClientId = tClient.ClientId
INNER JOIN tProduct ON tMaster.ProductId = tProduct.ProductId
由于其中一些列名不明确,您需要包含表名,即 tMaster.ClientId。
这应该可行。我需要设置一个快速架构来验证。
【讨论】:
以上是关于MYSQL Concat 几行并连接几张表的主要内容,如果未能解决你的问题,请参考以下文章
mysql备份数据库时怎样只备份一个数据库中的其中几张表的数据,覆盖时只覆盖这几张表的内容