แบบสอบถาม Django orm ไปยังแบบสอบถามย่อยหลายตาราง

ฉันกำลังพยายามเขียนแบบสอบถามย่อย "ซับซ้อน" โดยใช้ django orm

ฉันมีตารางด้านล่าง

ตารางนายจ้าง
นายจ้าง_id
นายจ้าง_name


ตารางแผนก

แผนก_id

นายจ้าง_id


ตารางพนักงาน

ชื่อพนักงาน

แผนก_id


ข้อความค้นหาของฉันควรส่งคืนชื่อของพนักงานทั้งหมด (employee_name) ที่ทำงานให้กับนายจ้างที่มีชื่อนายจ้าง = "Google"

ฉันมีคำถาม sql ด้านล่างและใช้งานได้ดี:

  select * from Employee_Table where department_id in (
     select department_id from Department_Table where employer_id in (
       select employer_id FROM Employer_Table WHERE employer_name="GOOGLE" ) ) 

ฉันยังใหม่กับการค้นหา Django orm และขอขอบคุณความช่วยเหลือในการทำความเข้าใจวิธีการทำงานใน django orm

ขอบคุณ


person man utd    schedule 06.03.2020    source แหล่งที่มา
comment
ฉันไม่ใช่ผู้เชี่ยวชาญ SQL แต่ฉันนึกภาพไม่ออกว่าเป็นความคิดที่ดีที่จะใช้ข้อความค้นหาแบบซ้อนเมื่อ JOIN แบบธรรมดาก็เพียงพอแล้ว สำหรับคำถาม โปรดดูที่นี่ (ฉันสมมติว่าโมเดลของคุณมี Foreign Keys ที่เกี่ยวข้อง - คุณไม่ได้แชร์สิ่งเหล่านั้นดังนั้น...)   -  person Robin Zigmond    schedule 07.03.2020
comment
ใช่. ฉันเห็นด้วย. เข้าร่วมจะดีที่สุด แต่ฉันแค่พยายามทำความเข้าใจว่าแบบสอบถามย่อยจะทำงานอย่างไรกับ orm และแบบสอบถามแบบซ้อนให้ความรู้สึกเหมือนเป็นวิธีที่ดีกว่าในการแสดงโฟลว์   -  person man utd    schedule 07.03.2020


คำตอบ (1)


สิ่งที่คุณกำลังมองหาคือสิ่งนี้:

employers = Employer.objects.filter(name='GOOGLE')
employees = Employee.objects.filter(department__employer__in=employers)

ฉันเชื่อว่าจะสร้างแบบสอบถามย่อย แต่อาจไม่ใช่แบบสอบถามที่คุณเขียน

สิ่งที่โรบินแนะนำคือ:

employees = Employee.objects.filter(department__employer__name='GOOGLE')

ซึ่งน่าจะมีประสิทธิภาพมากกว่าในระดับ db

person schillingt    schedule 09.03.2020