【问题标题】:SQL - need help writing/modifying querySQL - 需要帮助编写/修改查询
【发布时间】:2016-06-22 10:46:11
【问题描述】:

我已经为此奋斗了几天,由于 SQL 不是我经常使用的东西,我无法让我的查询按照我想要的方式工作。

我有一个简单的测试数据库,用于使用“toxi”解决方案标记记录(三个表,一个充当链接“ProgramCourses”)

我的桌子

Program:

 - ProgramID : int
 - ProgramName : varchar

Course:

 - CourseID : int
 - CourseName : varchar

ProgamCourses:

 - ProgramID : int
 - CourseID : int

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

我的查询

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

任何帮助将不胜感激。 如果有人好心为我编写查询,请您用表和列的全名编写它,因为这将使我更容易理解和采用其他用途。 谢谢。

T.

【问题讨论】:

  • 不要这样做。如果您希望标签为字符串,则在查询时进行计算。
  • 不要使用邪恶SELECT *

标签: mysql sql tags group-concat


【解决方案1】:

试试这个

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

【讨论】:

  • 谢谢。在 phpMyAdmin 中测试时,这有点像我想要的,但是当从 PHP 文件中调用时,我收到错误“致命错误:在选择时解析 SQL 查询失败: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 错误是 Parse 错误:第 3 行 LEFT JOIN ProgramCourses 上的意外子句作为 pc USING (ProgramID) ^ 找到:“在 C:\UwAmp\www\xataface-2.1.1\lib\SQL\Parser.php 中使用“在第 1773 行”。有任何想法吗?谢谢。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2011-03-14
    • 2019-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多