SQL - 需要帮助编写/修改查询

时间:2016-03-08 13:06:22

标签: mysql sql tags group-concat

我现在已经和它斗争了几天,因为SQL不是我经常使用的东西,所以我无法按照我想要的方式工作。

我有一个简单的测试数据库,用于使用" toxi"标记记录。解决方案(三个表,一个作为链接" ProgramCourses")

我的桌子

Program:

 - ProgramID : int
 - ProgramName : varchar

Course:

 - CourseID : int
 - CourseName : varchar

ProgamCourses:

 - ProgramID : int
 - CourseID : int

我尝试做的是将所有标签收集为字符串,然后将它们作为新列添加到Program表中。

我的查询

SELECT  * , GROUP_CONCAT(c.CourseName) AS tags_list
FROM `Program` p
LEFT JOIN ProgramCourses AS pc ON p.ProgramID = pc.ProgramID
LEFT JOIN Course AS c ON pc.CourseID = c.CourseID
GROUP BY p.ProgramID
ORDER BY p.ProgramID

这种做了我需要的东西,但它复制了一些列,我得到的结果是:

ProgramID   ProgramName     ProgramID   CourseID    CourseID    CourseName  tags_list

而不是

ProgramID   ProgramName     CourseName

非常感谢任何帮助。 如果有人能够为我写一个查询,请用全名表格和列来编写,因为这样我就可以更容易理解并采用其他用途。 谢谢。

吨。

2 个答案:

答案 0 :(得分:0)

DISTINCT c.CourseName返回具有不同CourseName的行数。

SELECT  * , GROUP_CONCAT(DISTINCT c.CourseName) AS tags_list
FROM `Program` p
LEFT JOIN ProgramCourses AS pc ON p.ProgramID = pc.ProgramID
LEFT JOIN Course AS c ON pc.CourseID = c.CourseID
GROUP BY p.ProgramID
ORDER BY p.ProgramID

如需更多信息,请访问Official

答案 1 :(得分:0)

试试这个

SELECT  * , GROUP_CONCAT(c.CourseName) AS tags_list
FROM `Program` p
LEFT JOIN ProgramCourses AS pc using(ProgramID)
LEFT JOIN Course AS c using(CourseID)
GROUP BY p.ProgramID
ORDER BY p.ProgramID