如何在SQL联接中将类名组合在一起

时间:2016-12-13 19:58:13

标签: mysql sql database

SELECT students.UserID, students.FName, students.LName, GROUP_CONCAT(classes.ClassName SEPARATOR ',') AS Classes
FROM classassociation
JOIN students
    ON classassociation.UserID = Students.UserID
JOIN classes
    ON classassociation.ClassID = classes.ClassID
WHERE classassociation.UserID = 3
GROUP BY ClassName;

这是我的Join语句,我正在尝试输出:

User ID | Name      | Classes
1        John smith   Science, Maths 

目前输出为

  User ID | FName | LName  | Classes
     1      John    smith    Science
     1      John    smith    Maths

我正在尝试将其输出为HTML表格,因此更改它的输出方式可以节省一些空间并且看起来更具代表性。

任何帮助表示赞赏!

3 个答案:

答案 0 :(得分:1)

我想你想要这个:

SELECT students.UserID,
    CONCAT(students.FName,' ', students.LName) AS Name,
    GROUP_CONCAT(classes.ClassName SEPARATOR ',') AS Classes
FROM classassociation
JOIN students
    ON classassociation.UserID = Students.UserID
JOIN classes
    ON classassociation.ClassID = classes.ClassID
WHERE classassociation.UserID = 3
GROUP BY UserID, CONCAT(students.FName, students.LName);

看起来您希望在一个中将名字和姓氏放在一起,所以对于这些名称,请使用CONCAT。使用GROUP CONCAT这些类是正确的,因为您希望将多个组合在一起。

然后你只需要调整GROUP BY语句。除了要聚合的列之外,您在SELECT语句中列出的任何列都需要存在。在您的情况下,正在聚合类,因此您可以从GROUP BY中排除它。用户ID和两个名称列都没有聚合,因此应列出这些列。

答案 1 :(得分:0)

而不是

GROUP BY ClassName;

执行:

GROUP BY students.UserID, students.FName, students.LName

答案 2 :(得分:0)

抱歉格式化....我是这个stackoverflow的新手。

以下代码将为您提供完美的结果

以下是详细信息:

我创建临时表只是为了让你演示

将您的列名替换为colum名称..

插入#temp值(' 1',' John',' smith',' science')

插入#temp值(' 1',' John',' Smith','数学')

选择

ID

,fname +' ' + LNAME AS NAME

,STUFF((选择DISTINCT',' +'' + T2.Class

FROM #temp T2

WHERE T1.ID = T2.ID

FOR XML PATH('')),1,2,'')AS CLASS

FROM #temp T1

GROUP BY ID,FNAME,LNAME

如果您有任何疑问,请告诉我 感谢