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

Django raw()-Abfrage, berechnetes Feld in WHERE-Klausel

Es hat eigentlich nichts mit Django selbst zu tun, sondern mit der Arbeitsweise von MySQL.

Sie können keine Aliase in WHERE-Bedingungen verwenden, da die Auswertung der WHERE-Klausel der Auswertung der Aliase vorausgeht.

Sie können entweder:

  • Wiederholen Sie die Klausel:

    Company.objects.raw('''SELECT *,core_location.a + core_location.b as dist
    FROM core_location,core_company
    WHERE (core_location.a + core_location.b)<10    
    ORDER BY dist''')
    
  • Führen Sie eine Unterauswahl durch:

    Company.objects.raw('''SELECT * FROM (
        SELECT *,core_location.a + core_location.b as dist
        FROM core_location,core_company            
    ) as subselect
    WHERE dist<10  
    ORDER BY dist''')