เรามีตารางที่เราใช้เก็บคำตอบของคำถาม เราจำเป็นต้องสามารถค้นหาผู้ใช้ที่มีคำตอบบางคำถาม ดังนั้นหากตารางของเราประกอบด้วยข้อมูลต่อไปนี้:
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 ในตารางคำตอบ
ดังนั้นตอนนี้ฉันกำลังสูญเสีย วิธีที่ดีที่สุดในการเข้าถึงสิ่งนี้คืออะไร? ขอบคุณ!