Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Duda con Join

Estas en el tema de Duda con Join en el foro de SQL Server en Foros del Web. Tengo la siguiente situacion y quiere ver si mediante SQL se puede resolver. Caso: Tengo una tabla1 con cierto filtro que me arroja n cantidad ...
  #1 (permalink)  
Antiguo 25/11/2010, 18:23
Avatar de gomitoz  
Fecha de Ingreso: agosto-2010
Mensajes: 32
Antigüedad: 13 años, 8 meses
Puntos: 0
Información Duda con Join

Tengo la siguiente situacion y quiere ver si mediante SQL se puede resolver.

Caso: Tengo una tabla1 con cierto filtro que me arroja n cantidad de registros.

Al momento de hacer un JOIN con otra tabla2 mediante un dato que es unico me arroja menos registros ya que en la segunda tabla2 no existe el dato con el que estoy comparando y por consecuente pues no arroja dicha infomación.

Como puedo hacer que en caso de que no exista información en tabla2 para hacer el JOIN no me lo excluya simplemente me deje los campos en blanco
pero a final de cuenta sigan siendo los mismos n cantidad de registros que me arrojo desde la primer consulta.

Gracias por su apoyo.
  #2 (permalink)  
Antiguo 26/11/2010, 09:48
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Duda con Join

Utiliza la sentencia FULL JOIN y todos aquellos que sean NULL seran registros que no coiciden en ambas tablas, puedes hacer uso de ISNULL(), para cambiar el null
__________________
MCTS Isaias Islas
  #3 (permalink)  
Antiguo 26/11/2010, 18:51
Avatar de gomitoz  
Fecha de Ingreso: agosto-2010
Mensajes: 32
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Duda con Join

Que tal lo intento con la funcion que me comentas... pero sigue igual no me arroja ningun null como me deberia aparacer porque no todos los registros de la tabla 1 estan en la tabla2, estoy intentando con el siguiente codigo en que estoy mal???
Código SQL:
Ver original
  1. SELECT     dbo.qry_rep_cob_04_creditos_gestion.STATUS, dbo.qry_rep_cob_04_creditos_gestion.RFC, dbo.qry_rep_cob_04_creditos_gestion.nombre_completo,
  2.                       dbo.qry_rep_cob_04_creditos_gestion.credito, dbo.tb_cobranza_promesas.fecha_captura, dbo.tb_cobranza_promesas.num_credito,
  3.                       dbo.tb_cobranza_promesas.cve_alr, dbo.tb_cobranza_promesas.RFC AS Expr1, dbo.tb_cobranza_promesas.nombre_contribuyente,
  4.                       dbo.tb_cobranza_promesas.fecha_promesa, dbo.tb_cobranza_promesas.monto_promesa, dbo.tb_cobranza_promesas.solicita_formulario,
  5.                       dbo.tb_cobranza_promesas.email, dbo.tb_cobranza_promesas.comentarios, dbo.tb_cobranza_promesas.tipo_llamada
  6. FROM         dbo.qry_rep_cob_04_creditos_gestion FULL OUTER JOIN
  7.                       dbo.tb_cobranza_promesas ON dbo.qry_rep_cob_04_creditos_gestion.RFC = dbo.tb_cobranza_promesas.RFC
  8. WHERE     (dbo.qry_rep_cob_04_creditos_gestion.STATUS = N'Promesa de Pago') AND (dbo.tb_cobranza_promesas.fecha_captura BETWEEN
  9.                           (SELECT     fecha_inicio
  10.                             FROM          dbo.tb_cobranza_fechas_reportes AS tb_cobranza_fechas_reportes_2) AND
  11.                           (SELECT     fecha_fin
  12.                             FROM          dbo.tb_cobranza_fechas_reportes AS tb_cobranza_fechas_reportes_1))
  #4 (permalink)  
Antiguo 27/11/2010, 23:31
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Duda con Join

Elimina el OUTER y solo deja FULL JOIN
__________________
MCTS Isaias Islas
  #5 (permalink)  
Antiguo 28/11/2010, 13:27
 
Fecha de Ingreso: febrero-2009
Mensajes: 312
Antigüedad: 15 años, 2 meses
Puntos: 4
Respuesta: Duda con Join

Cita:
Iniciado por iislas Ver Mensaje
Elimina el OUTER y solo deja FULL JOIN
Hola IISLAS. aprovecho para preguntar si FULL JOIN sería lo mismo que incluir otro AND con el campo en cuestión como NULL, es decir: AND CAMPOX IS NULL...

De todas formas el FULL JOIN entiendo que valdría para todos los campos a comparar con valor NULL no es así?


Gracias y saludos
  #6 (permalink)  
Antiguo 29/11/2010, 09:30
Avatar de gomitoz  
Fecha de Ingreso: agosto-2010
Mensajes: 32
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Duda con Join

Cita:
Iniciado por iislas Ver Mensaje
Elimina el OUTER y solo deja FULL JOIN
Lo intento de esa manera "eliminando el outer" pero el Sql en automatico lo vuelve a poner.

Intente extraer la informacion en Excel con el query sin poner el outer pero me aparecen mucho menos registros.

Es correcta la sintaxis de FULL JOIN o es FULL OUTER JOIN y se obtiene el mismo resultado?
  #7 (permalink)  
Antiguo 29/11/2010, 11:44
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Duda con Join

Yo lo he realizado con simple FULL JOIN, ¿donde lo estas haciendo?
__________________
MCTS Isaias Islas
  #8 (permalink)  
Antiguo 29/11/2010, 15:40
 
Fecha de Ingreso: julio-2010
Mensajes: 90
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Duda con Join

Con un LEFT JOIN tambien podria...

Unes las tablas con los campos que necesitas, y si no existen en una de las tablas, los reemplazas con un ISNULL().
  #9 (permalink)  
Antiguo 29/11/2010, 17:44
Avatar de gomitoz  
Fecha de Ingreso: agosto-2010
Mensajes: 32
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Duda con Join

Cita:
Iniciado por Garilax Ver Mensaje
Con un LEFT JOIN tambien podria...

Unes las tablas con los campos que necesitas, y si no existen en una de las tablas, los reemplazas con un ISNULL().

Que tal Garilax y iislas, trato de hacerlo de las dos maneras que me hacen mencion (FULL JOIN y LEFT JOIN) y simplemente obtengo la misma información...

Garilax a que te refieres con Reemplazar con un ISNULL????

simplemente no sale de la manera que deseo :(((


Saludos
  #10 (permalink)  
Antiguo 30/11/2010, 06:55
 
Fecha de Ingreso: julio-2010
Mensajes: 90
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Duda con Join

Cita:
select Tabla1.columna1,Tabla1.columna2, isnull(Tabla2.Columna1,0),isnull( Tabla2.columna2,0),isnull(Tabla2.columna3,0)
From Tabla1
Left Join Tabla2
On Tabla1.Columna1=Tabla2.Columna1 --En Esta parte, haces mencion a las 2 tablas
--diciendoles que la columna 1 y la columna2, deben ser iguales entre las 2 tablas...
And Tabla1.Columna2=Tabla2.Columna2

Esta query yo la uso para ver las diferencias de columnas entre 2 bases de datos.

Última edición por Garilax; 30/11/2010 a las 07:04
  #11 (permalink)  
Antiguo 30/11/2010, 12:06
Avatar de gomitoz  
Fecha de Ingreso: agosto-2010
Mensajes: 32
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Duda con Join

mmm no de plano no me saleee sigo obteniendo los mismos resultados... muchas gracias seguiré intentando..


Saludos
  #12 (permalink)  
Antiguo 30/11/2010, 13:40
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Duda con Join

Hice esta prueba:

Código SQL:
Ver original
  1. CREATE TABLE #T1 (ID INT, DESCRIPCION VARCHAR(50))
  2. CREATE TABLE #T1 (ID INT, DESCRIPCION VARCHAR(50))
  3.  
  4. INSERT INTO #T1 (1, 'MEXICO')
  5. INSERT INTO #T1 (2, 'RUSIA')
  6. INSERT INTO #T1 (3, 'ITALIA')
  7.  
  8. INSERT INTO #T1 (1, 'MEXICO')
  9. INSERT INTO #T1 (4, 'POLONIA')
  10. INSERT INTO #T1 (5, 'AFGANISTAN')
  11.  
  12. SELECT #T1.*, #T2.*
  13. FROM #T1 FULL JOIN #T2
  14. ON #T1.ID = #T2.ID

Y me da los resultados esperados, ¿cual es la diferencia con la tuya?
__________________
MCTS Isaias Islas
  #13 (permalink)  
Antiguo 30/11/2010, 13:57
 
Fecha de Ingreso: julio-2010
Mensajes: 90
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Duda con Join

Funciona ;)
  #14 (permalink)  
Antiguo 30/11/2010, 17:34
Avatar de gomitoz  
Fecha de Ingreso: agosto-2010
Mensajes: 32
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Duda con Join

Cita:
Iniciado por iislas Ver Mensaje
Hice esta prueba:

Código SQL:
Ver original
  1. CREATE TABLE #T1 (ID INT, DESCRIPCION VARCHAR(50))
  2. CREATE TABLE #T1 (ID INT, DESCRIPCION VARCHAR(50))
  3.  
  4. INSERT INTO #T1 (1, 'MEXICO')
  5. INSERT INTO #T1 (2, 'RUSIA')
  6. INSERT INTO #T1 (3, 'ITALIA')
  7.  
  8. INSERT INTO #T1 (1, 'MEXICO')
  9. INSERT INTO #T1 (4, 'POLONIA')
  10. INSERT INTO #T1 (5, 'AFGANISTAN')
  11.  
  12. SELECT #T1.*, #T2.*
  13. FROM #T1 FULL JOIN #T2
  14. ON #T1.ID = #T2.ID

Y me da los resultados esperados, ¿cual es la diferencia con la tuya?


Mira voy a ser un poco mas gráfico por que a como pones tu ejemplo es lo que he venido realizando y solo obtengo un dato.

En la lista siguiente coloco 5 Claves(RFCs) que tengo en mi tabla
  1. HAMA740124497
    PUSB8305118HA
    ROCM360210EC3
    VIVM890329HN9
    GAGJ590529TJ8

Hago mis filtros y me quedan estos 5 registros.

En la tabla 2 solo tengo las siguientes opciones:


HAMA740124497 | dd/mm/aa

y como resultado simplemente obtengo:


HAMA740124497 | HAMA740124497 | dd/mm/aa

En lugar de:


HAMA740124497 | HAMA740124497 | dd/mm/aa
PUSB8305118HA | NULL | NULL
.....etc


El query que estoy utlizando es:
Código SQL:
Ver original
  1. SELECT     dbo.qry_rep_cob_04_creditos_gestion.RFC, dbo.tb_cobranza_promesas.fecha_captura
  2. FROM         dbo.qry_rep_cob_04_creditos_gestion FULL  JOIN
  3.                       dbo.tb_cobranza_promesas ON dbo.qry_rep_cob_04_creditos_gestion.RFC = dbo.tb_cobranza_promesas.RFC
  4. WHERE     (dbo.qry_rep_cob_04_creditos_gestion.STATUS = N'Promesa de Pago') AND (dbo.tb_cobranza_promesas.fecha_captura BETWEEN
  5.                           (SELECT     fecha_inicio
  6.                             FROM          dbo.tb_cobranza_fechas_reportes AS tb_cobranza_fechas_reportes_2) AND
  7.                           (SELECT     fecha_fin
  8.                             FROM          dbo.tb_cobranza_fechas_reportes AS tb_cobranza_fechas_reportes_1)) AND (dbo.tb_cobranza_promesas.tipo_llamada = N'Outbound')
  #15 (permalink)  
Antiguo 30/11/2010, 19:00
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Duda con Join

¿Sera que se esta cumpliendo el BETWEEN, ademas, no veo para que hacer un SUBSELECT, si puedes hacer la comparacion con un WHERE y siempre comparando las fechas con >= y <=
__________________
MCTS Isaias Islas
  #16 (permalink)  
Antiguo 01/12/2010, 09:52
Avatar de gomitoz  
Fecha de Ingreso: agosto-2010
Mensajes: 32
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Duda con Join

Muchas gracias compadre... hice otro ejemplo con tablas diferentes un poco mas escueto el query pero funciono :)))

Gracias a todos por su apoyo...

Etiquetas: join, registros, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:26.