2017-03-11 2 views
0

나는 다음과 같은 테이블 구조 한 :MYSQL CONCAT 여러 행과 조인 여러 테이블이

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 문에 해당 열을 포함시키지 않으므로 결과를 출력하지 않습니다. 이러한 열 이름 중 일부는 당신이 테이블 이름을, 즉 tMaster.ClientId 포함 할 필요가 모호하기 때문에

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 

: 이런 식으로 뭔가를 시도하십시오.

이렇게하면됩니다. 확인을 위해 빠른 스키마를 설정해야합니다.

+0

perfecto! 대단히 감사합니다! –