Мой SQL Создать строку с данными, которые имеют одинаковый идентификатор - PullRequest
0 голосов
/ 16 ноября 2018

Так что после проверки нескольких форумов и подобных вопросов мне не удалось найти тот, который мне нужен.

У меня есть 2 таблицы:

questions            answers
+-----+---------+    +------+------+---------+
| id_q| question|    | id_q | id_a | answer  |
+=====+=========+    +======+======+=========+
|  1  |question1|    |   1  |   1  | answer1 |
+-----+---------+    +------+------+---------+
|  2  |question2|    |   1  |   2  | answer2 |
+-----+---------+    +------+------+---------+
                     |   2  |   3  | answer3 |
                     +------+------+---------+
                     |   2  |   4  | answer4 |
                     +------+------+---------+

И пытался получить что-то вроде этого:

+-----+---------+---------+---------+
| id_q| question| answer  | answer2 |
+=====+=========+=========+=========+
|  1  |question1| answer1 | answer2 |
+-----+---------+---------+---------+
|  2  |question2| answer3 | answer4 |
+-----+---------+---------+---------+

Уже попробовал:

SELECT questions.*,
GROUP_CONCAT(answers.answer SEPARATOR ' ; ') AS answers
FROM questions
LEFT OUTER JOIN answers ON questions.id_q = answers.id_q
GROUP BY questions.id_q

Но это дает мне:

+-----+---------+-------------------+
| id_q| question|       answers     |
+=====+=========+===================+
|  1  |question1| answer1 ; answer2 |
+-----+---------+-------------------+
|  2  |question2| answer3 ; answer4 |
+-----+---------+-------------------+

Не знаю, возможно ли даже добиться того, что я пытаюсь. Есть идеи?

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 16 ноября 2018

Все, что вам нужно, это самостоятельно присоединиться к таблице ответов:

SELECT questions.id_q, questions.question, a.answer1, a.answer2 FROM questions
INNER JOIN 
(SELECT answers.id_q, answers.answer AS answer1, answers_1.answer AS answer2 
FROM answers INNER JOIN answers AS answers_1 
ON answers.id_q = answers_1.id_q AND answers.id_a < answers_1.id_a) AS a
ON a.id_q = questions.id_q
0 голосов
/ 16 ноября 2018
SELECT  ID,QUES,ANS1,ANS2
FROM (
SELECT DISTINCT A.ID,A.QUES,A.ANS ANS1,B.ANS ANS2
,ROW_NUMBER() OVER (PARTITION BY A.ID ORDER BY A.ID ,A.ANS ,B.ANS) RN
 FROM (
SELECT ID,IDQ,QUES,ANS
 FROM MY_TEMP_TABLE1 TEM1
INNER JOIN MY_TEMP_TABLE TEM
ON TEM1.IDQ=TEM.ID
) A
INNER JOIN (
SELECT ID,IDQ,QUES,ANS
 FROM MY_TEMP_TABLE1 TEM1
INNER JOIN MY_TEMP_TABLE TEM
ON TEM1.IDQ=TEM.ID 
) B
ON A.ID=B.ID
WHERE A.ANS<>B.ANS
)
WHERE RN=1
;
0 голосов
/ 16 ноября 2018

Вы можете использовать correlated subqueries с вкладом функции mod:

SELECT q.id_q, q.question,
   ( SELECT a1.answer 
       FROM answers a1 
      WHERE a1.id_q = q.id_q 
        AND mod(a1.id_a,2) = 1 ) AS answer,
   ( SELECT a2.answer 
       FROM answers a2 
      WHERE a2.id_q = q.id_q 
        AND mod(a2.id_a,2) = 0 ) AS answer2
  FROM questions q
  LEFT OUTER JOIN answers a ON q.id_q = a.id_q
 GROUP BY q.id_q, q.question;

+-----+---------+---------+---------+
| id_q| question| answer  | answer2 |
+-----+---------+---------+---------+
|  1  |question1| answer1 | answer2 |
+-----+---------+---------+---------+
|  2  |question2| answer3 | answer4 |
+-----+---------+---------+---------+

Rextester Demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...