Lasst uns sagen, ich habe zwei Django Modelle Person und Gesellschaft wie folgt: -Django ForeignKey mit null = True, INNER JOIN und äußeren LEFT JOIN
class Company(models.Model):
name = models.CharField()
class Person(models.Model):
last_name = models.CharField(blank=True)
first_name = models.CharField()
company = models.ForeignKey(Company, null=True, blank=True)
Eine Person kann oder nicht zu einer Gesellschaft gehören.
Ich benutze MySQL. Ich möchte alle Personen, die keiner Gesellschaft angehören, dh Personen, bei denen die Gesellschaft null ist.
Wenn ich Person.objects.filter(company__isnull=True)
erhalte ich eine SQL, die im wesentlichen: -
SELECT * FROM PersonTable LEFT OUTER JOIN AgencyTable ON (PersonTable.company_id = AgencyTable.id) WHERE AgencyTable.id IS NULL
Wie gehe ich über das Erreichen der folgenden SQL: -
SELECT * FROM PersonTable INNER JOIN AgencyTable ON (PersonTable.company_id = AgencyTable.id) WHERE AgencyTable.id IS NULL
Von dem, was ich sammeln Beim Lesen der Django-Benutzer-Mailingliste war dies das Verhalten vor dem QuerySet-Refactor.
EDIT - Jetzt sehe ich die Blasphemie meiner Frage!
Was ich sagen will ist, ich einfach
SELECT * FROM PersonTable WHERE PersonTable.company_id IS NULL
Nun, wenn dies nicht für Sie Sinn machen wird, das ist eigentlich eine ‚Basis‘ Abfrage, die inneren verbundenen mit anderen Abfragen erhält, und dies führt zu seltsamen , sich wiederholende Ergebnisse. – chefsmart
Diese Frage ist wirklich ein Ergebnis einer mentalen Blockade. – chefsmart