我需要获取table1
中的所有行,即使table2
中不存在该行并将其显示为零。我使用raw sql query
来获取它,但是在 django ORM 中,我得到了仅在table2
中存在的值。 django orm的唯一区别是我在原始SQL查询中使用内部联接,而在我使用左联接。有什么方法可以实现这一点,还是应该使用原始SQL查询?谢谢。
Django ORM:
total=ApplicantInfo.objects.select_related('source_type').values('source_type__source_type').annotate(total_count=Count('source_type'))
DJANGO ORM在RAW SQL中的输出:
SELECT "applicant_sourcetype"."source_type", COUNT("applicant_applicantinfo"."source_type_id") AS "total_count" FROM "applicant_applicantinfo" INNER JOIN "applicant_sourcetype" ON ("applicant_applicantinfo"."source_type_id" = "applicant_sourcetype"."id") GROUP BY "applicant_sourcetype"."source_type"
RAW SQL:
SELECT source.source_type, count(info.source_type_id) as total_counts from applicant_sourcetype as source LEFT JOIN applicant_applicantinfo as info ON source.id = info.source_type_id GROUP BY source.id
答案 0 :(得分:0)
如果要与之左连接,则无法在ApplicantInfo
上进行查询。在SourceType
上查询:
qs = (SourceType.objects
.values('source_type')
.annotate(cnt=Count('applicantinfo'))
.values('source_type', 'cnt')
)
由于您尚未发布模型,因此可能需要修改字段名称才能使其正常工作。