Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Obtendo resultados de consulta de tabelas de 2 db, mesmo quando a segunda tabela não possui entradas correspondentes


O.P disse:

O problema é que o where cláusula filtra o conjunto de resultados, então seu teste para um req.status de 2 ou 5 joga fora qualquer coisa onde req.status é nulo porque nenhuma linha corresponde à tabela applications .

A ordem geral, teórica (já que nada além de uma implementação trivial faria algo assim) de operações para um select afirmação é:
  • Produza o produto cartesiano completo de cada tabela listada no from cláusula.
  • Filtre isso aplicando a join especificada critérios e linhas eliminadas que não passam nos testes especificados.
  • Aplicar os critérios de filtro especificados em where cláusula, removendo as linhas que não passam nos testes especificados.
  • Ordenar os resultados definidos nas expressões especificadas no group by cláusula e particione o conjunto de resultados em grupos.
  • Recolher cada grupo em uma única linha, computando o valor de todas as funções agregadas especificadas.
  • Remova todas as colunas do conjunto de resultados que não estão listadas na select lista de colunas de instruções.
  • Ordenar estes resultados finais definidos pelas colunas/expressões especificadas no order by cláusula.

Você pode fazer uma das duas coisas:

  • altere sua consulta para testar a nulidade:
    where...( req.status is null OR req.status in (2,5) )...
    

  • mova o teste para req.status para os critérios de junção:
    left join requests req on req.app_id =  apps.id
                          and req.uid    =  {$user_id}
                          and req.status in (2,5)