sql >> Databasteknik >  >> RDS >> Mysql

Django self join , Hur man konverterar denna fråga till ORM-fråga

Du kommer att ha lättare att göra detta med en mer normaliserad datamodell. Överväg att använda ett tillvägagångssätt som det här:

class NodeGroup(model.Model):
    pass

class NodeHealth(model.Model):
    node_group = models.ForeignKey(NodeGroup, related_name='nodes')
    health_time = models.IntegerField()
    status = models.IntegerField()

Då kan du göra så här:

from django.db.models import Max, F

nodes = NodeHealth.objects.all().annotate(
    max_health_time=Max('node_group__nodes__health_time')
).filter(health_time=F('max_health_time'))

Tyvärr kommer de returnerade noderna att ha dubbletter baserade om mer än en nod har samma värde för health_time . Du kanske kan lägga till en .distinct('node_group_id') det skulle kunna reda ut det, men jag är inte 100 % positiv.



  1. Hur man ersätter en del av en sträng i SQL

  2. Hur man undviker att infoga dubbletter av poster i MySQL

  3. Migration främmande nyckel kontra vältaliga relationer i Laravel

  4. Lös problem med SQL Server-databas som fastnat i misstänkt läge effektivt