Оператор MySQL Case, строки Mutliple, возвращенные в «Списке операторов» (часть после Then ...) - PullRequest
3 голосов
/ 17 сентября 2011

Проще говоря: я пытаюсь поместить подзапрос после части THEN оператора CASE, и он будет возвращать более одной строки.Это возможно?Более подробная информация ниже:

Я ищу способ вернуть несколько строк из оператора CASE, хотя другие поля в моем операторе SELECT возвращают только одну строку.Я продолжаю получать «Подзапрос возвращает более одной строки».Это то, что я хочу сделать!

ТАБЛИЦЫ:

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

ЗАПРОС:

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

Итак, поскольку существует несколько fkquestion_ids на course_report_id, желаемый результатis:

1   1
1   2
1   3
1   4
1   5
etc.

Опять я получаю 'Подзапрос возвращает более одной строки.'

Я пытаюсь повторить одно значение и связать его с разными значениями, создав несколькострок.Я думаю, что делал это раньше, но мне трудно найти мой прошлый запрос или понять, что не так с тем, что я делаю сейчас.ПРИМЕЧАНИЕ: этот SELECT в конечном итоге будет использоваться для заполнения оператора вставки.ЛЮБАЯ помощь очень ценится!

1 Ответ

1 голос
/ 17 сентября 2011

попробуй

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
...