Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie erstelle ich einen inneren Join in Django?

Wahrscheinlich suchen Sie nach select_related , was der natürliche Weg ist, dies zu erreichen:

pubs = publication.objects.select_related('country', 'country_state', 'city')

Sie können das resultierende SQL über str(pubs.query) überprüfen , was zu einer Ausgabe der folgenden Zeilen führen sollte (das Beispiel stammt von einem Postgres-Backend):

SELECT "publication"."id", "publication"."title", ..., "country"."country_name", ...  
FROM "publication" 
INNER JOIN "country" ON ( "publication"."country_id" = "country"."id" ) 
INNER JOIN "countrystate" ON ( "publication"."countrystate_id" = "countrystate"."id" ) 
INNER JOIN "city" ON ( "publication"."city_id" = "city"."id" ) 

Die zurückgegebenen Cursorwerte werden dann in die entsprechenden ORM-Modellinstanzen übersetzt, sodass Sie beim Durchlaufen dieser Veröffentlichungen über ihre eigenen Objekte auf die Werte der zugehörigen Tabellen zugreifen. Diese Zugriffe entlang der vorausgewählten Vorwärtsbeziehungen werden jedoch keine zusätzlichen db-Treffer verursachen:

{% for p in pubs %}
     {{ p.city.city_name}}  # p.city has been populated in the initial query
     # ...
{% endfor %}