按groupby选择并加入右侧列值应在一行中的位置

时间:2015-01-17 14:42:30

标签: mysql sql

ex:表t1有id,name和表t2有id,subname,t1_id(t1的外键)。

# t1 #

### id | name ###
### 1  |vishal ###
### 2  |mote ###
### 3  |ashish ###
### 4  |bhosle ###

# t2 #
### id | subname | t1_id ###
### 1  |merce    | 1 ###
### 2  |tech     | 1 ###
### 3  |temp     |2 ###
### 4  |tech     |2 ###

其中,关系是t1:t2 = 1:很多。

查询结果应为。

# t1.id | t1.name | t2_content #

### 1 |vishal |(0=(id=1,subname=merce,t1_id=1),1=(id=2,subname=tech,t1_id=1)) ###
### 2 |mote |(0=(id=3,subname=temp,t1_id=2),1=(id=4,subname=tech,t1_id=2)) ###

任何人都帮我找出选择这种结果的查询。我不想使用任何编程语言来生成这样的结果。只想使用sql查询。

2 个答案:

答案 0 :(得分:0)

你似乎基本上想要group_concat()。我不确定0=应该是什么,但这应该与此分开:

select t2.t1_id,
       group_concat('(', concat('(id=', t2.id, ',subname=', subname, ',t1_id=', t1_id, ','
                     separator ',') as StrangeFieldConcatenation
from t2
group by t2.t1_id;

答案 1 :(得分:0)

//增加t2_content输出长度

SET SESSION group_concat_max_len = 100000000;

//实际查询

SELECT t1.id,t1.name,GROUP_CONCAT(CONCAT('(id =“',t2.id,'”,subname =“',t2.subname,'”,t1_id =“', t2.t1_id,'“)'))AS t2_content FROM t1 INNER JOIN t2 ON t1.id = t2.t1_id GROUP BY t1.id;