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
fromklausul. - Filtrer det ved at anvende den angivne
joinkriterier og eliminerede rækker, der ikke består de angivne tests. - Anvend filterkriterierne angivet i
whereklausul, fjernelse af rækker, der ikke består de angivne tests. - Bestil resultaterne på de udtryk, der er angivet i
group byklausul 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
selectkolonneliste med udsagn. - Bestil disse endelige resultater indstillet efter de kolonner/udtryk, der er angivet i
order byklausul.
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.statustil sammenslutningskriterierne:left join requests req on req.app_id = apps.id and req.uid = {$user_id} and req.status in (2,5)