输入两个表,TABLE A
和TABLE B
TABLE A TABLE B
A_ID | A A_ID | B
1 | a 1 | b
2 | a1 1 | b1
3 | a2 2 | b2
期待输出TABLE C
TABLE C
A_ID | A | C
1 | a | b,b1 <--- Concat all rows in TABLE B with ','
2 | a1 | b2
3 | a2 | NULL <--- NULL if no matched A_ID in TABLE B
C列找到所有匹配的A_ID并将所有B行连接到新的TEXT字段。这可以只用MySQL查询吗?
insert into TABLE_C
SELECT
A1.A_ID,
A1.A,
GROUP_CONCAT(B1.B) as 'C'
FROM `TABLE_A` A1
LEFT JOIN `TABLE_B` B1
ON A1.A_ID=B1.A_ID
GROUP BY A1.A_ID;
上面的sql左连接有助于从两个表'TABLE_A'和'TABLE_B'获取公共匹配(相关)行,并且按ID分组有助于获取不匹配的行(彼此不相关,返回结果集)对于2,a1和3,null)。 group_concat绑定两列,默认情况下以逗号分隔。如果我们想要一些其他分隔符,那么我们只需要使用group_concat和separator语句。并且插入select帮助将结果行插入到新表'TABLE_C'中,该表必须在之前创建
使用GROUP_CONCAT()
函数试试这个。
SELECT
tbla.A_ID,
tbla.A,
GROUP_CONCAT(tblb.B)
FROM `TABLE A` tbla
LEFT JOIN `TABLE B` tblb
ON tbla.A_ID=tblb.A_ID
GROUP BY tbla.A_ID;
使用group_contact聚合表B中表B中的B列值。可以使用INSERT .. SELECT将值插入表C.
insert into tablec
select a.a_id, a.a, group_concat(b separator ',')
from tablea a
left join tableb b on (a.a_id = b.a_id)
group by a.a_id, a.a;