none
Traer datos de varias tablas entre ellas una vacia RRS feed

  • Pregunta

  • Hola amigos del foro tengo un problema con una consulta sql

    pasa lo siguiente:

    tengo varias tablas entre ellas dee las cuales mediante una sentencia sql traigo los registros guardados en esas tablas hasta ahy todo va bien lo que pasa es que a la hora de incluir una tabla que no tiene ningun registro ejecuta la consulta pero no me manda ningun registro este es el codigo

    SELECT SOLICITUD.COD_SOLICITUD,SOLICITUD.MONTO_SOLICITUD,SOLICITUD.PLAZO_SOLICITUD,SOLICITUD.FECHA_SOLICITUD,ESTADO_SOLICITUD.ESTADO_SOLICITUD
    
    
    
    FROM CLIENTE, SOLICITUD, PRODUCTOS,ESTADO_SOLICITUD,SOLICITUD_CLIENTE
    
    
    
    WHERE CLIENTE.CEDULA_CLIENTE=SOLICITUD.CEDULA_CLIENTE AND SOLICITUD.COD_PRODUCTO=PRODUCTOS.COD_PRODUCTO 
    
    
    
    AND SOLICITUD.COD_SOLICITUD =SOLICITUD_CLIENTE.COD_SOLICITUD AND SOLICITUD_CLIENTE.COD_ESTADO_SOLICITUD_CLIENTE=ESTADO_SOLICITUD.COD_ESTADO_SOLICITUD_CLIENTE 
    
    
    
    
    
    
    
    
    
    
    
    

    El problema esta en la tabla ESTADO_SOLICITUD Y SOLICITUD_CLIENTE AUN NO EXISTE NINGUN REGISTRO PERO SE DEBE MOSTRAR ESA INFORMACION JUNTO CON LA DE LAS DEMAS TABLAS, osea que me muestre el campo ESTADO_SOLICITUD como NULL pero que los demas si los muestre

    ALGUNA SUGERENCIA ... GRACIAS  


    Saludos Victor Ordoñez - Colombia
    martes, 25 de enero de 2011 0:06

Respuestas

  •  

    Espero te sirva

     

    SELECT SOLICITUD.COD_SOLICITUD,
    	 SOLICITUD.MONTO_SOLICITUD,
    	 SOLICITUD.PLAZO_SOLICITUD,
      SOLICITUD.FECHA_SOLICITUD,
      ESTADO_SOLICITUD.ESTADO_SOLICITUD,
      SOLICITUD_CLIENTE.COD_SOLICITUD_CLIENTE
    FROM SOLICITUD
    LEFT JOIN CLIENTE ON SOLICITUD.CEDULA_CLIENTE=CLIENTE.CEDULA_CLIENTE
    LEFT JOIN PRODUCTOS ON SOLICITUD.COD_PRODUCTO=PRODUCTOS.COD_PRODUCTO
    LEFT JOIN SOLICITUD_CLIENTE ON SOLICITUD_CLIENTE.COD_SOLICITUD=SOLICITUD.COD_SOLICITUD 
    -- dependiendo de tus campos y tus reglas de negocio deberías usar lo siguiente 
    LEFT JOIN ESTADO_SOLICITUD ON SOLICITUD.ESTADO_SOLICITUD=ESTADO_SOLICITUD.ESTADO_SOLICITUD
    -- o debes utilizar esta otra relación .... No las 2 al mismo tiempo
    LEFT JOIN ESTADO_SOLICITUD ON SOLICITUD.COD_SOLICITUD =ESTADO_SOLICITUD.COD_SOLICITUD
    --WHERE 
    
    martes, 25 de enero de 2011 3:34

Todas las respuestas

  • Estimado.

    Para este tipo de consultas debes usar el LEFT JOIN o RIGHT JOIN  para mostrar los datos completos de una tabla al margen que en la otro no haya registros.

    Tu estas igualando : es decir dicendo traeme la informacion CUANDO SE CUMPLAN TODAS ESTAS IGUALDADES, SQL no encuentra las igualdades entre todas las tablas y listo no sale nada.

    Ejemplo Solucion:

    select
    CLIENTE.DATOX,
    SOLICITUD.DATOY , .....
    FROM CLIENTE
    LEFT JOIN  SOLICITUD ON CLIENTE.CODIGOCLI =SOLICITUD.CODIGOCLI

    En esta consulta mostrara todos los datos de la tabla CLIENTE al margen que no tenga datos la SOLICITUD

    Espero te sirva

    Saludos 



    Rolando Lau Project Management
    • Propuesto como respuesta Rolando Lau martes, 25 de enero de 2011 0:29
    martes, 25 de enero de 2011 0:28
  • Hola Rolando Gracias por tu respuesta

    mira hice lo siguiente

    SELECT SOLICITUD.COD_SOLICITUD,
    	  SOLICITUD.MONTO_SOLICITUD,
    	  SOLICITUD.PLAZO_SOLICITUD,
        SOLICITUD.FECHA_SOLICITUD,
        ESTADO_SOLICITUD.ESTADO_SOLICITUD,
        SOLICITUD_CLIENTE.COD_SOLICITUD_CLIENTE
    FROM CLIENTE, 
       PRODUCTOS,
       ESTADO_SOLICITUD,
       SOLICITUD LEFT JOIN SOLICITUD_CLIENTE ON SOLICITUD_CLIENTE.COD_SOLICITUD=SOLICITUD.COD_SOLICITUD 
    WHERE CLIENTE.CEDULA_CLIENTE=SOLICITUD.CEDULA_CLIENTE AND SOLICITUD.COD_PRODUCTO=PRODUCTOS.COD_PRODUCTO 
     
    

    pero resulta que me manda los registros pero con los distintos estados de la solicitud por ejemplo la solicitud de un cliente la manda con los 3 diferentes estado aprobado, rechazado,desembolsado y el COD_SOLICITUD_CLIENTE si lo manda como NULL mi pregunta es como hago para que solo me mande un solo registro con su el campo ESTADO_SOLICITUD en NULL ya que aun no se define estado para esa solicitud del cliente, Otra cosa es que si en el WHERE igualo las llaves primarias de SOLICITUD con la de SOLICITUD_CLIENTE no me manda ningun registro

    Nuevamente Gracias...

     


    Saludos Victor Ordoñez - Colombia
    martes, 25 de enero de 2011 0:56
  •  

    Espero te sirva

     

    SELECT SOLICITUD.COD_SOLICITUD,
    	 SOLICITUD.MONTO_SOLICITUD,
    	 SOLICITUD.PLAZO_SOLICITUD,
      SOLICITUD.FECHA_SOLICITUD,
      ESTADO_SOLICITUD.ESTADO_SOLICITUD,
      SOLICITUD_CLIENTE.COD_SOLICITUD_CLIENTE
    FROM SOLICITUD
    LEFT JOIN CLIENTE ON SOLICITUD.CEDULA_CLIENTE=CLIENTE.CEDULA_CLIENTE
    LEFT JOIN PRODUCTOS ON SOLICITUD.COD_PRODUCTO=PRODUCTOS.COD_PRODUCTO
    LEFT JOIN SOLICITUD_CLIENTE ON SOLICITUD_CLIENTE.COD_SOLICITUD=SOLICITUD.COD_SOLICITUD 
    -- dependiendo de tus campos y tus reglas de negocio deberías usar lo siguiente 
    LEFT JOIN ESTADO_SOLICITUD ON SOLICITUD.ESTADO_SOLICITUD=ESTADO_SOLICITUD.ESTADO_SOLICITUD
    -- o debes utilizar esta otra relación .... No las 2 al mismo tiempo
    LEFT JOIN ESTADO_SOLICITUD ON SOLICITUD.COD_SOLICITUD =ESTADO_SOLICITUD.COD_SOLICITUD
    --WHERE 
    
    martes, 25 de enero de 2011 3:34
  • Gracias Gaalsi me fue de gran ayuda y ya lo logre solucionar
    Saludos Victor Ordoñez - Colombia
    martes, 25 de enero de 2011 3:58