Permintaan orm Django ke beberapa subkueri tabel

Saya mencoba menulis subkueri "kompleks" menggunakan Django orm.

Saya memiliki tabel di bawah ini.

Tabel perusahaan
id_perusahaan
nama_perusahaan


Tabel Departemen

departemen_id

majikan_id


Meja Karyawan

nama karyawan

departemen_id


Permintaan saya harus mengembalikan nama semua karyawan (nama_karyawan) yang bekerja untuk perusahaan dengan nama_perusahaan = "Google".

Saya memiliki kueri sql di bawah ini dan berfungsi dengan baik:

  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" ) ) 

Saya baru mengenal pertanyaan Django orm dan akan menghargai bantuan dalam memahami cara kerjanya di Django orm.

Terima kasih.


person man utd    schedule 06.03.2020    source sumber
comment
Saya bukan ahli SQL, tapi menurut saya menggunakan kueri bersarang adalah ide yang bagus jika JOIN saja sudah cukup. Mengenai pertanyaannya sendiri, lihat di sini (Saya berasumsi model Anda berisi Kunci Asing yang relevan - Anda tidak membagikannya jadi...)   -  person Robin Zigmond    schedule 07.03.2020
comment
Ya. Saya setuju. Bergabung adalah yang terbaik. Tapi saya hanya mencoba memahami cara kerja subkueri untuk orm dan kueri bersarang terasa seperti cara yang lebih baik untuk menunjukkan alurnya.   -  person man utd    schedule 07.03.2020


Jawaban (1)


Yang Anda cari adalah sesuatu seperti ini:

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

Saya yakin itu akan menghasilkan subkueri, tapi mungkin bukan subkueri yang Anda tulis.

Apa yang Robin sarankan adalah ini:

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

Yang mungkin lebih efisien di tingkat db.

person schillingt    schedule 09.03.2020