我有这样的表
tbl_biodata:
id : int value=>1
name : varchar(50) value => mike
...
tbl_biodata_education
第一行---
id : int value=>1
biodata_id : foreignkey to tbl_biodata.id value => 1
level : varchar(50) value => bachelor
year : int(4) value => 2006
第二行---
id : int value=>2
biodata_id : foreignkey to tbl_biodata.id value => 1
level : varchar(50) value => masters
year : int(4) value => 2010
我必须导出数据,这样生物数据不会重复超过一次,而且所有 tbl_biodata_education 列表中的重复教育为 2006 年学士,2010 年硕士
决赛 table 将是:
id
name => mike
education => bachelor 2006, masters 2010
解决方案 来自 simon-at-mso-net
SELECT
b.id,
b.name,
GROUP_CONCAT(be.education) AS education
FROM tbl_biodata b
LEFT JOIN (
SELECT
biodata_id,
CONCAT(level,' ',year) AS education
FROM tbl_biodata_education
) be
ON b.id = be.biodata_id
GROUP BY b.id
最佳答案
GROUP_CONCAT 是您获取列表所需条目的好 helper ,每个 tbl_biodata 记录
有 1 个列表。我选择建议一个子查询来简单地从 tbl_biodata_education
获取数据,这样 education
字段可以在被 之前更干净地
在外部查询中编辑CONCAT
ed GROUP_CONCAT
SELECT
b.id,
b.name,
GROUP_CONCAT(be.education) AS education
FROM tbl_biodata b
LEFT JOIN (
SELECT
biodata_id,
CONCAT(level,' ',year) AS education
FROM tbl_biodata_education
) be
on b.id = be.biodata_id
GROUP BY b.id
关于Mysql一对多关系数据检索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9429524/