Mysql
 sql >> Base de données >  >> RDS >> Mysql

Obtenir les résultats de la requête à partir de 2 tables db même lorsque la deuxième table n'a pas d'entrées correspondantes

O.P. a dit :

Le problème est que le where la clause filtre le jeu de résultats, donc votre test pour un req.status de 2 ou 5 rejette tout ce qui contient req.status est nul car aucune ligne ne correspond à la table applications .

L'ordre général et théorique (puisque rien d'autre qu'une implémentation triviale ne ferait jamais quelque chose comme ça) pour un select déclaration est :

  • Produire le produit cartésien complet de chaque table répertoriée dans le from clause.
  • Filtrer cela en appliquant le join spécifié critères et lignes éliminées qui ne réussissent pas les tests spécifiés.
  • Appliquez les critères de filtrage spécifiés dans where clause, supprimant les lignes qui ne réussissent pas les tests spécifiés.
  • Ordonner l'ensemble de résultats sur les expressions spécifiées dans le group by clause et partitionnez le jeu de résultats en groupes.
  • Réduire chacun de ces groupes en une seule ligne, en calculant la valeur de toutes les fonctions d'agrégation spécifiées.
  • Supprimer toutes les colonnes de l'ensemble de résultats qui ne sont pas répertoriées dans le select liste des colonnes des déclarations.
  • Ordonner cet ensemble de résultats finaux selon les colonnes/expressions spécifiées dans le order by clause.

Vous pouvez effectuer l'une des deux actions suivantes :

  • modifiez votre requête pour tester la nullité :

    where...( req.status is null OR req.status in (2,5) )...
    
  • déplacer le test sur req.status aux critères d'adhésion :

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