2

我似乎无法让 GROUP_CONCAT 查询工作。

我有这张桌子,我加入了:

  stud
id | stud_name  |         
-----------------
1  | Class1     | 
2  | Class2     | 

  note
id | stud_id    |   mat_id       |   Note      | 
------------------------------------------------
1  | 1          |      1         |  10         | 
2  | 1          |      2         |  9          | 
3  | 1          |      1         |  10         |

mat
id | mat_name | 
----------------
1  | Porc     | 
2  | Vaca     |

这是我为加入他们所做的事情。

 SELECT
             `stud`.`id`
            , `mat`.`mat_name`
            , `note`.`note`

    FROM
            `stud`
   LEFT JOIN 
            `note` 
    ON
             (`stud`.`id` = `note`.`id_stud`)
   LEFT JOIN 
            `mat` 
        ON 
             (`note`.`id_mate` = `mat`.`id`) 

这是我希望他们看到的。

mat.id  | mat_name | Note      | 
-----------------------------
1       | Porc     | 10,10     | 
2       | Vaca     | 9         |

这是他们的样子。

mat.id  | mat_name | Note      | 
-----------------------------
1       | Porc     | 10        | 
2       | Vaca     | 9         | 
1       | Port     | 10        |

我试着这样做。

 SELECT 
 `mat`.`mat_name`,
 GROUP_CONCAT(`note`.`note`) AS `note`.`note`,
FROM ( "Here is what I did to join them." )attr_groups
GROUP BY `mat`.`mat_name`;
ORDER BY `mat`.`mat_name`;

有任何想法吗?

编辑:如果我添加 group by 或 ORDER by,则找不到结果。如果我不添加它们,则查询有效,但不会连接它们。

4

3 回答 3

2
SELECT mat.id,
       mat.mat_name,
       GROUP_CONCAT(note.note) as note
FROM mat
LEFT JOIN note ON mat.id = note.mat_id
LEFT JOIN stud ON note.stud_id = stud.id     
GROUP BY mat.id, mat.mat_name
ORDER BY mat.mat_name

SQLFiddle 演示

于 2013-09-19T09:21:40.533 回答
0

您在 group by 中有错误。

GROUP BY `mat`.`mat_name`;
------------------------^^^---

;从查询中删除

SELECT
     `stud`.`id`
    , `mat`.`mat_name`
    , GROUP_CONCAT(`note`.`note`) AS Note
FROM
    `stud`
LEFT JOIN 
    `note` 
ON
     (`stud`.`id` = `note`.`id_stud`)
LEFT JOIN 
    `mat` 
ON 
     (`note`.`id_mate` = `mat`.`id`) 
GROUP BY
    `stud`.mat_id
ORDER BY
    `mat`.`mat_name`
于 2013-09-19T09:21:06.383 回答
0

尝试这个:

SELECT
    m.id,
    m.mat_name,
    GROUP_CONCAT(n.Note) as grades
FROM
    mat m
LEFT JOIN note n
    ON n.mat_id = m.id
GROUP BY
    m.id
于 2013-09-19T09:22:17.757 回答