Как уже советовали в комментариях выше, вы должны действительно изменить это до нормализованной структуры!
НЕ рекомендуется:
Если вы действительно хотите сделать это с вашей текущей моделью данных, вы можете сделать это следующим образом (обратите внимание, я не эксперт по MySQL, так что, возможно, есть лучший способ!):
SELECT s.StmNo, s.Statement, SUBSTR (a.Answer, s.StmNo, 1)
FROM tblstm s CROSS JOIN tblanswer a WHERE a.RespondentId = 22 AND s.StmNo = 1
UNION
SELECT s.StmNo, s.Statement, SUBSTR (a.Answer, s.StmNo, 1)
FROM tblstm s CROSS JOIN tblanswer a WHERE a.RespondentId = 22 AND s.StmNo = 2
UNION
SELECT s.StmNo, s.Statement, SUBSTR (a.Answer, s.StmNo, 1)
FROM tblstm s CROSS JOIN tblanswer a WHERE a.RespondentId = 22 AND s.StmNo = 3
Вышеприведенное предполагает, что StmNo
идентично индексу соответствующего ответа в Answer
и дает вам ответы на первые 3 вопроса ... это НЕ эффективно и не элегантно И может быть более элегантный способ чтобы сделать это с MySQL (я никогда не использовал MySQL) ...
РЕДАКТИРОВАТЬ - другой вариант:
Создать таблицу tableAnswerNo
с одним столбцом AnswerNo
с 48 строками ... строки содержат каждое отдельное число из [1; 48].
Тогда вы могли бы сделать это:
SELECT s.StmNo, s.Statement, x.Answer FROM
tblstm s CROSS JOIN
(SELECT a.RespondentId, an.AnswerNo, SUBSTR (a.Answer, an.AnswerNo, 1) Answer FROM
tblanswer a CROSS JOIN tableAnswerNo an WHERE a.RespondentId = 22) x ON x.AnswerNo = s.StmNo
ORDER BY s.StmNo
Это дает вам все 48 ответов для RespondentId
22 так, как вы хотите ...