sql >> Base de Datos >  >> RDS >> Mysql

Obtener resultados de consultas de tablas de 2 db incluso cuando la segunda tabla no tiene entradas correspondientes

OP dijo:

El problema es que el where La cláusula filtra el conjunto de resultados, por lo que su prueba para un req.status de 2 o 5 arroja cualquier cosa donde req.status es nulo porque ninguna fila coincide con la tabla applications .

El orden de operaciones general y teórico (ya que nada más que una implementación trivial podría hacer algo como esto) para un select declaración es:

  • Produzca el producto cartesiano completo de cada tabla enumerada en el from cláusula.
  • Filtrar eso aplicando el join especificado criterios y filas eliminadas que no pasan las pruebas especificadas.
  • Aplicar los criterios de filtro especificados en el where cláusula, eliminando filas que no pasan las pruebas especificadas.
  • Ordenar los resultados establecidos en las expresiones especificadas en el group by cláusula y partición de los resultados establecidos en grupos.
  • Contraiga cada uno de estos grupos en una sola fila, calculando el valor de todas las funciones agregadas especificadas.
  • Eliminar todas las columnas del conjunto de resultados que no aparecen en la lista select lista de columnas de declaraciones.
  • Ordene este conjunto de resultados finales por las columnas/expresiones especificadas en el order by cláusula.

Puede hacer una de estas dos cosas:

  • cambie su consulta para probar la nulidad:

    where...( req.status is null OR req.status in (2,5) )...
    
  • mover la prueba contra en req.status al criterio de unión:

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