MySQL как выбрать и оставить объединение двух таблиц по условию на первую зависит от себя - PullRequest
0 голосов
/ 07 июля 2019

У меня есть две таблицы ответов и наборы ответов, необходимо выбрать все ответы, если другой ответ равен отфильтрованной опции

таблица answerSet

id       user       otherData
-------------------------- 
1         Ali       10:20
2         Mohammad  11:40
3         Bob       09:00  
4         Reza      00:20 

и ответы:

id       answerSetId  questionid  answer 
----------------------------------------- 
10         1            300        false (NOk)
11         1            301          a ( don't need this)
12         1            302          ---  
13         1            303          ---
14         2            300        true (OK)
15         2            301          b (<=need this)
16         2            302          ---  
17         2            303          ---
18         3            300        true (OK)
19         3            301          xz (<=need this)
20         3            302          ---  
21         4            303          ---
22         5            300        true (OK)
23         6            301          yyy (<=need this)
24         7            302          ---  
25         8            303          ---

Я думаю, что нужно использовать внутреннее соединение и левое соединение, но я не знаю, как

, поэтому мне нужно что-то вроде ниже

id       user           questionid      answer 
------------------------------------------------------ 
15     Mohammad            301          b (<=need this)
19         Bob             301          xz (<=need this)
23       Reza              301          yyy (<=need this)

Я пытаюсь что-то сделать, но яне знаю точно

SELECT * FROM answers left Join answerSets on answerSet_id=answersets.id WHERE questionid=300 and answer=true 

Ответы [ 3 ]

1 голос
/ 07 июля 2019

Я думаю, вы хотите JOIN с EXISTS:

SELECT a.*, ans.answer
FROM answers a JOIN
     answerSets ans
     ON a.answerSet_id = ans.id
WHERE a.questionid = 301 AND
      EXISTS (SELECT 1
              FROM answersets a2
              WHERE a2.answerSet_id = a.answerSet_id AND
                    a2.questionid = 300
                    a2.answer = 'true'
             );
0 голосов
/ 08 июля 2019

Использовать буксир SELECT-LEFT JOIN

SELECT * FROM (SELECT answerSet_id as id FROM answers LEFT JOIN answerSet on answerSet_id=answerset.id 
WHERE answer=true) ast
LEFT JOIN
answers a
on ast.id=a.answerSet_id
where formanswers_questionId=301 
0 голосов
/ 07 июля 2019

Не думаю, что вам нужно JOIN.Поскольку вам нужен только столбец user из answerSet, попробуйте это.

SELECT answers.id,
    (SELECT user FROM answerSet where id=answers.answerSetId) AS user,
    answers.questionid,
    answers.answer 
FROM answers 
WHERE questionid=301 AND 
    answerSetId IN (SELECT answerSetId 
                    FROM answers 
                    WHERE questionid=300 AND 
                          answer='true'
                    );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...