sql >> Databasteknik >  >> RDS >> Mysql

Django raw()-fråga, beräknat fält i WHERE-satsen

Det har faktiskt ingenting att göra med själva Django, utan med hur MySQL fungerar.

Du kan inte använda alias i WHERE-villkor, eftersom WHERE-satsutvärderingen föregår aliasutvärderingen.

Du kan antingen:

  • Upprepa satsen:

    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''')
    
  • Gör ett underval:

    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''')
    


  1. Fel vid användning av PDO-förberedda uttalanden och LIMIT i fråga

  2. Använd FILEGROUP_NAME() för att returnera namnet på en filgrupp i SQL Server

  3. PostgreSQL på väg upp:2018 Postgres fynd och 2019 trender

  4. Fördelar med MySQLi över MySQL