sql >> Databasteknik >  >> RDS >> Mysql

Få frågeresultat från 2 db-tabeller även när den andra tabellen inte har några motsvarande poster

O.P. sa:

Problemet är att where klausul filtrerar resultatuppsättningen, så ditt test för en req.status av 2 eller 5 kastar ut allt där req.status är null eftersom ingen rad matchade tabellen applications .

Den allmänna, teoretiska (eftersom inget annat än en trivial implementering faktiskt skulle göra något liknande detta) operationsordning för en select uttalandet är:

  • Ta fram den fullständiga kartesiska produkten för varje tabell som anges i from klausul.
  • Filtrera det genom att använda den angivna join kriterier och eliminerade rader som inte klarar de angivna testerna.
  • Använd filterkriterierna som anges i where sats, tar bort rader som inte klarar de angivna testerna.
  • Ordna resultaten som anges på uttrycken som anges i group by klausul och partitionera resultaten i grupper.
  • Komprimera varje sådan grupp till en enda rad och beräkna värdet för alla angivna aggregatfunktioner.
  • Ta bort alla kolumner från resultatuppsättningen som inte är listade i select kolumnlista för uttalanden.
  • Beställ detta slutliga resultat efter kolumner/uttryck som anges i order by klausul.

Du kan göra en av två saker:

  • ändra din fråga för att testa för ogiltighet:

    where...( req.status is null OR req.status in (2,5) )...
    
  • flytta testet mot req.status till anslutningskriterierna:

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


  1. Skillnad mellan numerisk, float och decimal i SQL Server

  2. [Video] Ansible och PostgreSQL

  3. Ta bort en del av strängen inklusive ett specifikt tecken från en sträng med MySQL

  4. Vad motsvarar ST_DWithin (PostGIS - PostgreSQL) för MySQL?