我现在已经和它斗争了几天,因为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
非常感谢任何帮助。 如果有人能够为我写一个查询,请用全名表格和列来编写,因为这样我就可以更容易理解并采用其他用途。 谢谢。
吨。
答案 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