Mysql一对多关系数据检索

标签 mysql

我有这样的表

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 字段可以在被 之前更干净地 CONCATed 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/

相关文章:

php编码使用php将表单提交到服务器

php - 使用一个php文件处理两个mysql查询?

javascript - 如何捕获 Node mySQL 查询中的错误?

php - 如何循环遍历数据行以显示多个结果?

mysql - 我怎么能.... SELECT *, lcase(name) AS name FROM table

sql - 如何使用连接执行 AND?

mysql - 在查询 "LIMIT 1"中使用 "SELECT 1 ..."有意义吗?

javascript - 我想将可更改的数据存储在表行的一列中

php - 具有无限字段的表单

mysql - 在 Mysql 5.1.x 中有什么方法可以使 UNIQUE 索引不区分大小写吗?