Chúng tôi có một bảng mà chúng tôi sử dụng để lưu trữ câu trả lời cho các câu hỏi. Chúng tôi cần có khả năng tìm thấy những người dùng có câu trả lời nhất định cho các câu hỏi cụ thể. Vì vậy, nếu bảng của chúng tôi bao gồm các dữ liệu sau:
user_id question_id answer_value
Sally 1 Pooch
Sally 2 Peach
John 1 Pooch
John 2 Duke
và chúng tôi muốn tìm người dùng trả lời 'Pooch' cho câu hỏi 1 và 'Peach' cho câu hỏi 2, SQL sau đây (rõ ràng) sẽ không lo lắng:
select user_id
from answers
where question_id=1
and answer_value = 'Pooch'
and question_id=2
and answer_value='Peach'
Suy nghĩ đầu tiên của tôi là tự tham gia vào bảng cho mỗi câu trả lời mà chúng tôi đang tìm kiếm:
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'
Điều này hoạt động, nhưng vì chúng tôi cho phép số lượng bộ lọc tìm kiếm tùy ý, chúng tôi cần tìm thứ gì đó hiệu quả hơn nhiều. Giải pháp tiếp theo của tôi là một cái gì đó như thế này:
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
Tuy nhiên, chúng tôi muốn người dùng có thể thực hiện cùng một câu hỏi hai lần, vì vậy họ có thể có hai câu trả lời cho câu hỏi 1 trong bảng câu trả lời.
Vì vậy, bây giờ tôi đang thua lỗ. Cách tốt nhất để tiếp cận điều này là gì? Cảm ơn!