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