Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-10-2011
jasmad jasmad is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 75
Poder: 13
jasmad Va por buen camino
INNER JOIN de tres tablas no muestra datos

buenas,
tengo una base de datos con tres tablas de cliente, por que hay dos tipos de clientes y la tabla de cliente que tiene los datos generales de los dos tipos de cliente, entonces para agregar un cliente a la bd necesariamente se llenan la tabla de datos generales y una de las tablas que heredan la general dependiendo del tipo, la cuestion es quiero crear un view que una las tres para obtener todos los clientes, pero cuando lo ejecuto me devuelve valores nulos... este es el query:

Código SQL [-]
SELECT CLIENTE."ID" AS CLIENTE_ID,
           CLIENTE."NOMBRE_CLIENTE" AS CLIENTE_NOMBRE_CLIENTE,      
           CLIENTE."CEDULA" AS CLIENTE_CEDULA,      
           CLIENTE."CIUDAD" AS CLIENTE_CIUDAD,      
           CLIENTE."TELEFONO" AS CLIENTE_TELEFONO,      
           CLIENTE."CELULAR" AS CLIENTE_CELULAR,      
           CLIENTE."FAX" AS CLIENTE_FAX,      
           CLIENTE."EMAIL" AS CLIENTE_EMAIL,      
           CLIENTE."DIRECCION" AS CLIENTE_DIRECCION,      
           CLIENTE."PROVINCIA" AS CLIENTE_PROVINCIA,      
           CLIENTE."PAIS" AS CLIENTE_PAIS,      
           CLIENTE."TIPO" AS CLIENTE_TIPO,      
           CLIENTE."APARTADO_POSTAL" AS CLIENTE_APARTADO_POSTAL,      
           CLIENTE."CODIGO_POSTAL" AS CLIENTE_CODIGO_POSTAL,      
           CLIENTE_DERIVADO_1."ESTADO_CONFIGURACION" AS ESTADO_CONFI,      
           CLIENTE_DERIVADO_1."ESTADO_EQUIPO" AS ESTADO_EQUIP,      
           CLIENTE_DERIVADO_1."NUMERO_TERMINAL" AS NUMERO_TERMI,      
           CLIENTE_DERIVADO_1."NOMBRE_NEGOCIO" AS NOMBRE_NEGOC,      
           CLIENTE_DERIVADO_1."EMPRESA_INSTALO" AS EMPRESA_INST,      
           CLIENTE_DERIVADO_1."AFILIADOR" AS AFILIADOR,      
           CLIENTE_DERIVADO_1."FECHA" AS FECHA,      
           CLIENTE_DERIVADO_1."FECHA_INGRESO" AS FECHA_INGRES,      
           CLIENTE_DERIVADO_1."FECHA_INSTALACION" AS FECHA_INSTAL,      
           CLIENTE_DERIVADO_2."FECHA_NACIMIENTO" AS FECHA_NACIMIEN,      
           CLIENTE_DERIVADO_2."FECHA_VENCIMIENTO" AS FECHA_VENCIMIE,      
           CLIENTE_DERIVADO_2."CONTACTO" AS CONTACTO,      
           CLIENTE_DERIVADO_2."ESTADO_CONTRATO" AS ESTADO_CONTRAT,      
           CLIENTE_DERIVADO_2."SEGUNDO_TELEFONO" AS SEGUNDO_TELEFO,      
           SISTEMA."NOMBRE" AS SISTEMA_NOMBRE,      
           USUARIO."NOMBRE_USUARIO" AS USUARIO_NOMBRE_USUARIO 
FROM "CLIENTE" CLIENTE 
           INNER JOIN "CLIENTE_DERIVADO_1" CLIENTE_DERIVADO_1 ON CLIENTE."ID" = CLIENTE_DERIVADO_1."ID_CLIENTE"      
           INNER JOIN "CLIENTE_DERIVADO_2" CLIENTE_DERIVADO_2 ON CLIENTE."ID" = CLIENTE_DERIVADO_2."ID_CLIENTE"      
           INNER JOIN "SISTEMA" SISTEMA ON CLIENTE_DERIVADO_1."ID_SISTEMA" = SISTEMA."ID"      
           INNER JOIN "USUARIO" USUARIO ON CLIENTE_DERIVADO_1."ID_USUARIO" = USUARIO."ID" ;

ademas hay dos relaciones mas pero estas no afectan ya que he probado el query separando los tipos de cliente y funciona, el problema es cuando uno los dos tipos de cliente...
alguien sabe que tiene de incorrecto este query

Última edición por ecfisa fecha: 12-10-2011 a las 21:24:05. Razón: Corregir problema de etiquetas (WYSIWYG)
Responder Con Cita
  #2  
Antiguo 13-10-2011
celades1 celades1 is offline
Miembro
 
Registrado: ago 2005
Posts: 116
Poder: 19
celades1 Va por buen camino
Hola

Entiendo que un cliente esta en una tabla tipo o en la otra pero no en las dos
Por tanto debes hacer left join de esas dos tablas no inner

Código SQL [-]
    LEFT JOIN "CLIENTE_DERIVADO_1" CLIENTE_DERIVADO_1 ON CLIENTE."ID" = CLIENTE_DERIVADO_1."ID_CLIENTE"      
           LEFT JOIN "CLIENTE_DERIVADO_2" CLIENTE_DERIVADO_2 ON CLIENTE."ID" = CLIENTE_DERIVADO_2."ID_CLIENTE"

Saludos
Responder Con Cita
  #3  
Antiguo 19-10-2011
jasmad jasmad is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 75
Poder: 13
jasmad Va por buen camino
gracias celades ese era el problema yo solo conocia el inner, por lo que veo el inner como para unir tablas que se sabe estan relacionadas y el left excluye
Responder Con Cita
  #4  
Antiguo 19-10-2011
celades1 celades1 is offline
Miembro
 
Registrado: ago 2005
Posts: 116
Poder: 19
celades1 Va por buen camino
Hola

el left no excluye sino al contrario

Lo que hace el inner
sobre la primera tabla es no enviar nada que no este en la segunda

lo que hace el left
muestra todos los registros de la primera tabla esten o no ligados a la segunda y si la segunda tiene relacion con el registro de la primera te envia sus datos en caso contrario los valores de la segunda seran nulos

En fin no se explicarme mejor, pero hay muchisima documentación al respecto

Saludos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
JOIN de dos tablas en dos bases de datos diferentes gluglu Firebird e Interbase 3 12-02-2005 12:39:48
Join de tablas en Bases de Datos diferentes gluglu Conexión con bases de datos 2 09-02-2005 10:32:31
Consulta para tres tablas...... inexperto SQL 1 08-08-2004 06:59:04
Join De Tres Tablas Con Acces MAGRANA SQL 2 01-07-2004 17:51:44
Problemas con el entrelazado de tres tablas JAGOMAN SQL 6 03-03-2004 17:40:33


La franja horaria es GMT +2. Ahora son las 10:01:49.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi