Kami memiliki tabel yang kami gunakan untuk menyimpan jawaban atas pertanyaan. Kami harus dapat menemukan pengguna yang memiliki jawaban tertentu untuk pertanyaan tertentu. Jadi, jika tabel kami terdiri dari data berikut:
user_id question_id answer_value
Sally 1 Pooch
Sally 2 Peach
John 1 Pooch
John 2 Duke
dan kami ingin menemukan pengguna yang menjawab 'Pooch' untuk pertanyaan 1 dan 'Peach' untuk pertanyaan 2, SQL berikut ini (jelas) tidak akan berfungsi:
select user_id
from answers
where question_id=1
and answer_value = 'Pooch'
and question_id=2
and answer_value='Peach'
Pikiran pertama saya adalah bergabung sendiri di meja untuk setiap jawaban yang kami cari:
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'
Ini berfungsi, tetapi karena kami mengizinkan jumlah filter pencarian yang sewenang-wenang, kami perlu menemukan sesuatu yang jauh lebih efisien. Solusi saya berikutnya adalah sesuatu seperti ini:
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
Namun, kami ingin pengguna dapat mengambil kuesioner yang sama dua kali, sehingga mereka berpotensi memiliki dua jawaban untuk pertanyaan 1 di tabel jawaban.
Jadi, sekarang saya bingung. Apa cara terbaik untuk mendekati ini? Terima kasih!