sql >> Database teknologi >  >> RDS >> Mysql

Hentning af forespørgselsresultater fra 2 db-tabeller, selv når den anden tabel ikke har nogen tilsvarende indgange

O.P. sagde:

Problemet er, at where klausul filtrerer resultatsættet, så din test for en req.status af 2 eller 5 smider alt ud, hvor req.status er null, fordi ingen række matchede tabellen applications .

Den generelle, teoretiske (da intet andet end en triviel implementering nogensinde ville gøre noget lignende) operationsrækkefølge for en select erklæringen er:

  • Producer det fulde kartesiske produkt af hver tabel, der er angivet i from klausul.
  • Filtrer det ved at anvende den angivne join kriterier og eliminerede rækker, der ikke består de angivne tests.
  • Anvend filterkriterierne angivet i where klausul, fjernelse af rækker, der ikke består de angivne tests.
  • Bestil resultaterne på de udtryk, der er angivet i group by klausul og opdel resultaterne i grupper.
  • Skjul hver sådan gruppe i en enkelt række, og udregn værdien af ​​alle specificerede aggregerede funktioner.
  • Fjern alle kolonner fra resultatsættet, der ikke er angivet i select kolonneliste med udsagn.
  • Bestil disse endelige resultater indstillet efter de kolonner/udtryk, der er angivet i order by klausul.

Du kan gøre en af ​​to ting:

  • ændre din forespørgsel til at teste for ugyldighed:

    where...( req.status is null OR req.status in (2,5) )...
    
  • flyt testen mod på req.status til sammenslutningskriterierne:

    left join requests req on req.app_id =  apps.id
                          and req.uid    =  {$user_id}
                          and req.status in (2,5)
    


  1. Unik begrænsning over flere tabeller

  2. Hvordan henter man data fra en SQL Server-database i C#?

  3. RSA i Android producerer rigtige nøgler, men forkert dekryptering

  4. psql ugyldig kommando \N under gendannelse af sql