2014-02-10 6 views
0

У меня все еще возникают проблемы с моим подзапросом, возвращающим несколько строк в некоторых случаях, а не другими. Я просмотрел некоторые из предложенных вопросов, но они все еще не соответствуют моей проблеме. Пользователи в этих примерах возвращали более одного значения в свой дополнительный запрос, не устанавливая разделителей, или просто использовали неправильный синтаксис для своей ситуации. Я поместил свой код ниже, так как не могу понять, где эта проблема.mysql - Подзапрос возвращает более 1 ошибки строки

SELECT q.id, q.title, (SELECT a.answer FROM v_events_abstracts_answers AS a WHERE a.question_id=q.id AND uniq_id=2013121713133221), q.code 
       FROM v_events_abstracts_questions AS q 
        WHERE q.event_id=193 
        ORDER BY q.ordering, q.id ASC 

Я не просто прошу «отладки».

ответ

0

Вот ваш запрос:

SELECT q.id, q.title, 
     (SELECT a.answer 
     FROM v_events_abstracts_answers AS a 
     WHERE a.question_id=q.id AND uniq_id=2013121713133221 
     ), 
     q.code 
FROM v_events_abstracts_questions AS q 
WHERE q.event_id=193 
ORDER BY q.ordering, q.id ASC; 

Что неясно сообщение об ошибке? Подзапрос:

 (SELECT a.answer 
     FROM v_events_abstracts_answers AS a 
     WHERE a.question_id=q.id AND uniq_id=2013121713133221 
     ), 

Возвращает более одного ряда. Этот подзапрос используется в контексте, где разрешен скалярный подзапрос . A скалярный подзапрос - это тот, который возвращает одну строку с одним столбцом. Затем результаты обрабатываются как одно значение.

Вы можете исправить это путем агрегирования или используя limit. Вот один из способов:

 (SELECT group_concat(a.answer) 
     FROM v_events_abstracts_answers AS a 
     WHERE a.question_id=q.id AND uniq_id=2013121713133221 
     ) as answers, 
+0

Я думал, что предел был a.question_id = q.id ... –

+0

@soccermanstan. , , Это делает его коррелированным подзапросом. По-видимому, один или несколько вопросов имеют два или более ответов. –

0

избежать использования коррелировать суб запроса вы можете сделать: -

SELECT q.id, q.title, a.answer, q.code 
FROM v_events_abstracts_questions AS q 
LEFT OUTER JOIN v_events_abstracts_answers AS a 
ON a.question_id = q.id 
AND a.uniq_id = 2013121713133221 
WHERE q.event_id = 193 
ORDER BY q.ordering, q.id ASC 

Вопрос заключается в том, что если вопрос имеет более чем 1 ответ для уникального идентификатора, то как вам решить, какой из них выбрать?

Смежные вопросы