简单地说:我想在CASE语句的'THEN'部分之后放一个子查询,它将返回多行。这可能吗?更多详情如下:
我正在寻找一种从CASE语句中获取多行的方法,即使我的SELECT语句中的其他字段只返回一行。我不断得到'Subquery返回多行。'这就是我想要的!
TABLES:
courses
-------
course_id, fksubject_id;
course_reports
--------------
course_reports_id, fkcourse_id, is_finished, timestamp;
course_reports_answers
----------------------
course_reports_answers_id, fkcourse_reports_id, fkquestion_id, answer1, answer2, answer3
QUERY:
SELECT
cr.course_reports_id,
CASE WHEN c.fksubject_id = 1 THEN (SELECT fkquestion_id from course_reports_answers WHERE fkcourse_reports_id = 1) ELSE NULL END AS 'fkquestion_id'
FROM
courses c
join course_reports cr on cr.fkcourse_id = c.course_id
join course_reports_answers cra on cra.fkcourse_reports_id = cr.course_reports_id
所以,因为每个course_report_id有多个fkquestion_id,所以期望的结果是:
1 1
1 2
1 3
1 4
1 5
etc.
再次,我得到'Subquery返回多行。'
我正在尝试重复单个值并将其与不同的值配对,从而创建多个行。我想我以前做过这个,但是我很难找到我过去的查询或弄清楚我现在在做什么有什么不对。注意:此SELECT最终将用于填充插入语句。非常感谢任何帮助!
答案 0 :(得分:1)
试
SELECT
cr.course_reports_id,
Z.fkquestion_id
FROM
courses c
join course_reports cr on cr.fkcourse_id = c.course_id
join course_reports_answers cra on cra.fkcourse_reports_id = cr.course_reports_id
left outer join (SELECT cc.course_id, a.fkquestion_id from course_reports_answers a, courses cc WHERE cc.fksubject_id = 1 and a.fkcourse_reports_id = 1) Z on c.course_id = Z.course_id