Django ORM 中的LEFT JOIN
左連接操作通常用於透過將行與匹配列組合來從多個表中檢索數據。在 Django 中,您可以使用filter() 和values_list() 方法來實現此目的。
考慮以下情境:您有三個模型 - Volunteer、Department 和 DepartmentVolunteer。一個志工可以屬於多個部門,一個部門可以有多個志工。您想要檢索沒有分配任何志工的所有部門。
實現此目的的一種方法是透過原始SQL 查詢:
SELECT d.name FROM vsp_department AS d LEFT JOIN vsp_departmentvolunteer AS dv ON d.id = dv.department_id WHERE dv.department_id IS NULL;
但是,Django 提供了更優雅和使用以下步驟執行此操作的Pythonic 方式:
以下程式碼示範了這個方法:
qs = Department.objects.filter( departmentvolunteer__isnull=True).values_list('name', flat=True) print(qs.query)
此查詢產生以下SQL:
SELECT "app_department"."name" FROM "app_department" LEFT OUTER JOIN "app_departmentvolunteer" ON ( "app_department"."id" = "app_departmentvolunteer"."department_id" ) WHERE "app_departmentvolunteer"."id" IS NULL
傳回沒有任何志工的部門名稱已分配。
以上是如何使用Django的ORM有效率地找出沒有志工的部門?的詳細內容。更多資訊請關注PHP中文網其他相關文章!