Tenemos una tabla que usamos para almacenar las respuestas a las preguntas. Necesitamos poder encontrar usuarios que tengan ciertas respuestas a preguntas particulares. Entonces, si nuestra tabla consta de los siguientes datos:
user_id question_id answer_value
Sally 1 Pooch
Sally 2 Peach
John 1 Pooch
John 2 Duke
y queremos encontrar usuarios que respondan 'Pooch' para la pregunta 1 y 'Peach' para la pregunta 2, el siguiente SQL (obviamente) no funcionará:
select user_id
from answers
where question_id=1
and answer_value = 'Pooch'
and question_id=2
and answer_value='Peach'
Mi primer pensamiento fue unirme a la tabla para cada respuesta que buscamos:
select a.user_id
from answers a, answers b
where a.user_id = b.user_id
and a.question_id=1
and a.answer_value = 'Pooch'
and b.question_id=2
and b.answer_value='Peach'
Esto funciona, pero dado que permitimos un número arbitrario de filtros de búsqueda, necesitamos encontrar algo mucho más eficiente. Mi siguiente solución fue algo como esto:
select user_id, count(question_id)
from answers
where (
(question_id=2 and answer_value = 'Peach')
or (question_id=1 and answer_value = 'Pooch')
)
group by user_id
having count(question_id)>1
Sin embargo, queremos que los usuarios puedan tomar el mismo cuestionario dos veces, por lo que potencialmente podrían tener dos respuestas a la pregunta 1 en la tabla de respuestas.
Entonces, ahora estoy perdido. ¿Cuál es la mejor manera de abordar esto? ¡Gracias!