Первая ошибка в вашем запросе здесь:
where texter_survey_response_value.question_id = 66
(select texter_survey_response_value.value
Пожалуйста, попробуйте объяснить, что вы планируете здесь делать, сравнить exter_survey_response_value.question_id
с 66
или с результатом подзапроса?
Также я заметил, что вы используете ключевое слово ilike, а не как !!
Далее я заметил, что некоторые подобные строки можно превратить в одну строку :
or texter_survey_response_value.value like '%Aspergers%'
or texter_survey_response_value.value like '%Asperger%'
И это также:
or texter_survey_response_value.value like '%Autistic Spectrum Disorder%'
or texter_survey_response_value.value like '%Autistic Spectrum%'
or texter_survey_response_value.value like '%Autistic%'
И это:
texter_survey_response_value.value like '%Autism%'
texter_survey_response_value.value like '%Autism Spectrum%'
Как Акина уже прокомментировала ваш вопрос ...
Таким образом, все эти 7 строк кода можно заменить на:
texter_survey_response_value.value like '%Autism%'
or texter_survey_response_value.value like '%Autistic%'
or texter_survey_response_value.value like '%Asperger%'
И когда вы ответите мне на мой вопрос в верхней части этого ответа, я могу помочь вам больше .. .
Также вы можете использовать псевдонимы для своих таблиц, и вы должны использовать операнд IN
для сравнения значений с несколькими значениями, которые вы получите из подзапроса.
select tsr.conversation_id
from texter_survey_response tsr
join texter_survey_response_value tsrv on tsrv.response_id = tsr.response_id
where tsr.question_id = 66
and tsrv.value in
(select tsrv1.value
from texter_survey_response_value tsrv1
where tsrv1.value like '%Autism%'
or tsrv1.value like '%Autistic%'
or tsrv1.value like '%Asperger%')
Также я не делаю вижу необходимость в подзапросе. Вы можете сделать это следующим образом:
select tsr.conversation_id
from texter_survey_response tsr
join texter_survey_response_value tsrv on tsrv.response_id = tsr.response_id
where tsr.question_id = 66
and tsrv.value like '%Autism%'
or tsrv.value like '%Autistic%'
or tsrv.value like '%Asperger%';
После некоторого обсуждения в чате с ОП я написал этот запрос:
select tsr.conversation_id
from texter_survey_response tsr
join texter_survey_response_value tsrv on tsrv.response_id = tsr.response_id
where tsrv.question_id = 66
and tsrv.response_id in (select tsrv2.response_id
from texter_survey_response tsr2
left join texter_survey_response_value tsrv2
on tsrv2.response_id = tsr2.response_id
where tsr2.question_id in (205, 227, 278)
and tsrv2.value like '%Autism%'
or tsrv2.value like '%Autistic%'
or tsrv2.value like '%Asperger%');