Как я могу применить несколько фильтров к таблицам MySQL

Это то, что я использую.

module.exports.getBookByName = function(name,callback){
    var query = {
            name: {$regex : name}
    }
    User.find(query,callback);
}
0
задан Martin Delobbe 27 February 2019 в 15:57
поделиться

3 ответа

Я бы сделал это следующим образом:

select a.RespondentId 
from Answers a
when (question, answer) in ( ('Big', 'Yes'), ('Children', 'Yes') )
group by RespondentId
having count(*) = 2 ;

Это легко обобщить на:

with qa as (
      select v.*
      from (values ('Big', 'Yes'), ('Children', 'Yes')
     ) v(question, answer)
select a.RespondentId 
from Answers a join
     qa
     on a.question = qa.question and a.answer = qa.answer
group by RespondentId
having count(*) = (select count(*) from qa);

Это довольно обобщенно. Вы могли бы даже организовать CTE для получения массива или аргумента json и разбора на отдельные значения сравнения.

0
ответ дан Gordon Linoff 27 February 2019 в 15:57
поделиться

Вы можете проверить результат, имеющий счет = 2 для строк, которые соответствуют вопросу и ответ, где условие

select RespondentId 
from Answers 
when question in ( 'Big', 'Children')
and Answer ='Yes' 
group by RespondentId having count(*) = 2 
0
ответ дан scaisEdge 27 February 2019 в 15:57
поделиться

Я думаю, что вы ищете, чтобы развернуть стол. Существуют разные синтаксисы для разных баз данных. Вы эффективно превращаете значения столбца «Вопрос» в собственные столбцы, а затем ищете строки, соответствующие вашим критериям.

Вот неэффективный пример в стандартном SQL, где я создаю одну таблицу для каждого вопроса и объединяю их в одну таблицу, используя RespondentId.

select respondent_id from (select * from answers where question = 'Big') as big join (select * from answers where question = 'Children') as children on big.respondent_id = children.respondent_id where big.answer = 'Yes' and children.answer = 'Yes';

0
ответ дан Curtis Boyden 27 February 2019 в 15:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: