Мне нужно было получить все строки в table1
, даже если он не существует в table2
, и отобразить его как ноль.Я получил его, используя raw sql query
, но в django ORM я получаю значения, существующие только в table2
.Единственное отличие в моей django-форме состоит в том, что я использую внутреннее соединение, в то время как в необработанном 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