Mysql select语句中的Subselect返回null

Mysql select语句中的Subselect返回null,mysql,sql,subquery,Mysql,Sql,Subquery,我试图在一个大学数据库中列出课程的名称及其预科(如果有的话)。这些表的模式如下所示 course(course_id, title, dept_name, credits) prereq(course_id, prereq_id) 这是我的问题 SELECT title, (SELECT title FROM course NATURAL JOIN prereq c2 WHERE c1.prereq_id = c2.course_id)

我试图在一个大学数据库中列出课程的名称及其预科(如果有的话)。这些表的模式如下所示

course(course_id, title, dept_name, credits)
prereq(course_id, prereq_id)
这是我的问题

SELECT title, (SELECT title
              FROM course NATURAL JOIN prereq c2
              WHERE c1.prereq_id = c2.course_id)
FROM course NATURAL LEFT JOIN prereq c1;
我的结果为第二条select语句的所有值返回null。我有一种感觉,它与c1的值有关,在第二个select语句中,c1的值是未知的。有没有办法解决这个问题,或者可以使用更好的查询

我试着列出课程的名称和他们的预先要求(如果有) 任何)在大学数据库中

您可以这样做:

SELECT 
  c1.title "Course Title",
  IFNULL(c2.title, "Has No Preqs") "Preq Course Title"
FROM course c1
LEFT JOIN prereq p ON p.course_id = c1.course_id
LEFT JOIN course c2 ON p.prereq_id= c2.course_id
但如果任何一门课程都有许多先修课程,这就行不通了

在这种情况下,您必须使用
GROUP_CONCAT
,正如@danihp在他的回答中指出的那样:

SELECT 
  c1.title "Course Title",
  GROUP_CONCAT(IFNULL(c2.title, "Has No Preqs")) "Preq Course Title"
FROM course c1
LEFT JOIN prereq p ON p.course_id = c1.course_id
LEFT JOIN course c2 ON p.prereq_id= c2.course_id
GROUP BY c1.title ;
您正在寻找聚合函数:

SELECT 
   title,  
   group_concat( distinct c2.title ) as prereqs
FROM course 
NATURAL LEFT JOIN prereq c1
left outer join course c2 on c1.course_id = c2.course_id
group by course.course_id;

非常感谢。这对你很有帮助,你应该学会模仿答案。右边的句子是:
IFNULL(GROUP_-CONCAT(c2.title),“没有Preqs”)
not
GROUP_-CONCAT(IFNULL(c2.title),“没有Preqs”)
@danihp-我没有复制你的答案。我在回答中指出了你的答案。而
IFNULL(GROUP_CONCAT(c2.title),“没有preq”)
也是正确的。