У нас є таблиця, яку ми використовуємо для зберігання відповідей на запитання. Нам потрібно вміти знайти користувачів, які мають певні відповіді на конкретні запитання. Отже, якщо наша таблиця складається з таких даних:
user_id question_id answer_value
Sally 1 Pooch
Sally 2 Peach
John 1 Pooch
John 2 Duke
і ми хочемо знайти користувачів, які відповідають на "Pooch" на питання 1 та "Peach" на питання 2, наступний SQL не буде (очевидно) не працювати:
select user_id
from answers
where question_id=1
and answer_value = 'Pooch'
and question_id=2
and answer_value='Peach'
Моя перша думка полягала в тому, щоб самостійно приєднатись до таблиці за кожною шуканою нами відповіддю:
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'
Це працює, але оскільки ми допускаємо довільну кількість фільтрів пошуку, нам потрібно знайти щось набагато ефективніше. Моє наступне рішення було приблизно таким:
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
Однак ми хочемо, щоб користувачі могли двічі взяти одну і ту ж анкету, щоб вони могли мати два відповіді на питання 1 у таблиці відповідей.
Отже, зараз я в розгубі. Який найкращий спосіб підійти до цього? Спасибі!